2016-09-13 2 views
0

Я потянув некоторые JSONP для извлечения данных для подключения к Highcharts ...Доступ к тексту ответа для JSONP. Сведение нескольких объектов в текст

$(function() { 

    $.getJSON("http://xxxx.xxxxx&?callback=?", function(json){ 

    var data = json; 
    var options = { 
    xAxis: { 
     type: 'datetime' 
    }, 
    series: [{ 
     data: [] 
    }] 
    } 
    Highcharts.each(data, function(p, i) { 
    for (var i = 0; i < p.length; i++) { 
     options.series[0].data.push(
     [p[i].timeBucket, parseFloat(p[i].errors)] 
    ); 
    } 
    }); 

    $('#container').highcharts(options); 
}); 
}); 

Структура данных, при просмотре через Firebug, есть (пример) ....

[[{"timeBucket": XXXXXX, "errors": 10}],[{"timeBucket": XXXXXX, "errors": 30}],[{"timeBucket": XXXXXX, "errors": 20}]] ...... 

Структура, как показано в Firebug, является 10 объектами, которая истинна, но для жизни меня я просто не могу разобрать.

В результате ничего не происходит.

Что я сделал был локон ответа и сохранил его как «data.json» и изменил код соответственно ...

$.getJSON("data.json", function(json){ 

Он работает как чемпион! Когда я console.log typeof, я получаю «Object» (единственное число), поэтому мне кажется, что мне нужно как-то сгладить все эти 10 объектов только одним, и не знаю, как это сделать.

Я попытался JSON.stringify и не повезло, я попытался JSON.stringify (JSON), а затем JSON.parse (JSON)

Когда я вижу текст ответа в Firebug, это именно то, что я ищу для. Кто-нибудь знает, как я могу изменить свой код, чтобы использовать этот мучительный и необходимый ответ. Текст вместо 10 объектного кода?

+1

Итак, вы хотите иметь 1 массив объектов? –

+0

Попробуйте следующее: 'var data = json [0];' вместо 'var data = json;' – trincot

+0

Спасибо, ребята! Ничего из этого не происходит. Мне просто нужно использовать консервированные данные, пока у меня не будет времени, чтобы выбрать это. Хотя ᾠῗᵲ ᄐ ᶌ находится на целевом уровне, 1 массив объектов - именно то, что мне нужно. –

ответ

2

Вы можете использовать jQuery.map, чтобы переназначить его, чтобы ваши объекты находились в одном массиве.

Описание: Переведите все элементы в массиве или объекте в новый массив элементов.

Таким образом, вы должны заменить var data = json; с

var data = $.map(json,function(x,i){ 
    return x[0]; 
}); 

Это даст вам формат [{},{},{}], который вы можете получить доступ в цикле, как

$.each(data, function(i,p) { 
     options.series[0].data.push(
     [p.timeBucket, parseFloat(p.errors)] 
    ) 
    }); 

Или, если вы хотите сохранить исходный цикл вы можете сделать

for (var i = 0; i < data.length; i++) { 
    options.series[0].data.push(
    [data[i].timeBucket, parseFloat(data[i].errors)] 
); 
} 

var x = [[{"timeBucket": 111, "errors": 10}],[{"timeBucket": 222, "errors": 30}],[{"timeBucket": 333, "errors": 20}]]; 
 

 
var data = $.map(x,function(x,i){ 
 
    return x[0]; 
 
}); 
 
$('#results').html(JSON.stringify(data));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id='results'>

Смежные вопросы