我试图从JSON对象创建一个Javascript对象。这是因为我想用一个需要一组特殊数据的.js插件制作图表。他需要以下对象作为数据:
var data = {
labels : ["January","February","March","April","May","June","July"],
datasets : [
{
fillColor : "rgba(220,220,220,0.5)",
strokeColor : "rgba(220,220,220,1)",
pointColor : "rgba(220,220,220,1)",
pointStrokeColor : "#fff",
data : [65,59,90,81,56,55,40]
},
{
fillColor : "rgba(151,187,205,0.5)",
strokeColor : "rgba(151,187,205,1)",
pointColor : "rgba(151,187,205,1)",
pointStrokeColor : "#fff",
data : [28,48,40,19,96,27,100]
}
] }
我的JSON对象看起来像这样(不要介意数据,它的测试数据)。我的JSON对象没有问题。它在线传递了一些JSON验证器:
{ "Metingen": [
{
"Temp": "25.00",
"Humy": "37.40",
"Time": [
{
"Uur": "22",
"Minuut": "32",
"Second": "15",
"Dag": "15",
"Maand": "06",
"Jaar": "2014"
}
]
},
{
"Temp": "25.00",
"Humy": "37.20",
"Time": [
{
"Uur": "22",
"Minuut": "32",
"Second": "15",
"Dag": "15",
"Maand": "06",
"Jaar": "2014"
}
]
} ] }
所以我需要在标签中加入所有" Dag"值,数据集[0] .data需要" Temp"和数据集1。数据需要" Humy"来自我的JSON对象的值。但我怎么能动态地做到这一点?因为Temp和Humy值的数量可以随着每页刷新而改变。我试过这个,但那不起作用。 (我在这里省略了Humy数据集以简化它。
var dataBuilder = new Object();
for(i = 0; i < objs.Lijnen;i++) {
dataBuilder.labels[i] = objs.Metingen[i].Time[0].Dag;
dataBuilder.datasets[0].data[i] = objs.Metingen[i].Temp;
}
dataBuilder.datasets[0].fillColor = "rgba(220,220,220,0.5)";
dataBuilder.datasets[0].strokeColor = "rgba(220,220,220,1)";
dataBuilder.datasets[0].pointColor = "rgba(220,220,220,1)";
dataBuilder.datasets[0].pointStrokeColor = "#fff";
然后我得到了一个&#34;无法设置属性&#39; 0&#39;未定义&#34;在第4行。 我还尝试了以下方法:
for(i = 0; i < objs.Lijnen;i++) {
dataBuilder[labels][i] = objs.Metingen[i].Time[0].Dag;
dataBuilder[datasets][0][data][i] = objs.Metingen[i].Temp;
} ... (code omitted)
我在某处读到Javascript对象只是数组的数组,但这是逻辑,它不起作用,因为&#34;标签&#34;,&#34;数据集&#34;和&#34;数据&#34;未定义。所以我也试过这个:
for(i = 0; i < objs.Lijnen;i++) {
dataBuilder["labels"][i] = objs.Metingen[i].Time[0].Dag;
dataBuilder["datasets"][0]["data"][i] = objs.Metingen[i].Temp;
} (code omitted)
但在这里我也得到了一个错误的错误。我检查了objs.Metingen [i] .Time [0] .Dag和objs.Metingen [i] .Temp,他们工作得很完美。所以任何人都知道如何将我的JSON数据解析为Graph插件所需的数据表?也许是JQuery? (关于Graph plugin is here的更多信息)很抱歉这篇长篇文章。
答案 0 :(得分:0)
您的第一个代码有几个问题:
考虑到以后使用它的方式,对象dataBuilder未正确初始化。考虑这个代码也导致&#34;无法设置属性&#39; 0&#39;未定义&#34;:
obj = Object();
obj.array[0] = 1000;
在上面,obj确实是一个对象,它可以有一个名为&#34; array&#34;的属性,但该属性尚不存在 - 因此,你不能为它的&#39; 0&#分配任何东西39; member(因为它在那时还不是一个数组,它是&#34; undefined&#34;)。正确的例子:
obj = Object();
obj.array = Array();
obj.array[0] = 1000;
或者,更简单:
obj = {array: []};
obj.array[0] = 1000;
这将创建一个具有属性&#34; array&#34;的对象。这是一个空数组。
假设objs.Lijnen是一个对象,&#34; i&lt; objs.Lijnen&#34;总是假的。你可能想要的是&#34; objs.Lijnen.Metingen.length&#34;或&#34; objs.Metingen.length&#34; (不确定objs.Lijnen是否是一个拼写错误或是Metingen的父对象)。
假设Lijnen不是拼写错误并且是Metingen的父母,则需要将objs.Metingen更改为objs.Lijnen.Metingen。
工作代码:
var obj = {Lijnen: JSON.parse(YOUR_JSON_STRING) };
...
var dataBuilder = {labels: [], datasets: []}; // properly initialized object
for(i = 0; i < objs.Lijnen.Metingen.length;i++) { // .length
dataBuilder.labels[i] = objs.Lijnen.Metingen[i].Time[0].Dag;
if (!dataBuilder.datasets[0]) dataBuilder.datasets[0] = { data: [] };
dataBuilder.datasets[0].data[i] = objs.Lijnen.Metingen[i].Temp;
}
dataBuilder.datasets[0].fillColor = "rgba(220,220,220,0.5)";
dataBuilder.datasets[0].strokeColor = "rgba(220,220,220,1)";
dataBuilder.datasets[0].pointColor = "rgba(220,220,220,1)";
dataBuilder.datasets[0].pointStrokeColor = "#fff";