2016-09-13 39 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我得到「對象」(單數),所以看來我需要以某種方式將所有這10個對象變成一個,而不知道如何去做。

我已經試過JSON.stringify和沒有運氣,我已經試過JSON.stringify(JSON),然後JSON.parse(JSON)

當我看到響應文本螢火蟲,這正是我期待對於。任何人都知道我可以如何修改我的代碼來使用那個誘人的和需要的響應文本而不是10個目標代碼?

+1

所以,你想有1個陣列的對象? –

+0

試試這個:'var data = json [0];'而不是'var data = json;' – trincot

+0

謝謝你們!這些都不起作用。我只需要使用罐頭數據,直到我有時間來挑選它。雖然ᾠῗᵲᄐᶌ在目標上,但1個對象數組正是我所需要的。 –

回答

2

您可以使用jQuery.map重新映射它,以便您的對象位於一個數組中。

描述:將數組或對象中的所有項目轉換爲新的項目數組。

所以,你會與

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

更換var data = json;這會給你,你可以在你的循環訪問諸如

$.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'>