我有以下代码从JSON响应中提取值。我想要做的是以类似于如何使用php中的关联数组的方式存储数据。抱歉代码效率低下。写下的数组注释是我希望它在对象中查看的方式。
$.each(responseData, function(k1,v1){
if(k1 == "0"){
$.each(v1, function(k2,v2){
$.each(v2, function(k3, v3){
if(k3 == "val"){
//store in object here
//Array1 = array("time"=>k2, "iVal"=>v3)
console.log(k3 + v3 + k2);
}else{
//Array2 = array("time"=>k2, "aVal"=>v3)
console.log(k3 + v3 + k2);
}
});
});
}
});
所有信息都存在,但我不确定如何为对象中的值存储每个实例。我确实尝试将它存储起来:
//obj created outside
obj1.date = k2;
obj2.iVal = v3;
但是这样做每次都明显覆盖,并且只保留最后一个实例,所以我想知道如何才能将所有值存储起来?
编辑:添加了所需的输入和输出。
输入
{"0":{"18.00":{"iVal":85.27,"aVal":0.24},"19.00":{"iVal":85.27,"aVal":0.36},"20.00":{"iVal":0,"aVal":0}}, "success":true}
期望的输出
array1 = {"time":"18.00", "iVal":85.27},{"time":"19.00", "iVal":85.27},{"time":"20.00", "iVal":0}
array2 = {"time":"18.00", "aVal":0.24},{"time":"19.00", "aVal":0.36},{"time":"20.00", "aVal":0}
答案 0 :(得分:1)
试试这个:
var g1=[];
var g2=[];
for ( a in o[0])
{
g1.push({time:a , iVal:o[0][a]['iVal']})
g2.push({time:a , aVal:o[0][a]['aVal']})
}
http://jsbin.com/qividoti/3/edit
答案 1 :(得分:0)
通过在ajax调用的成功回调中调用JSON.parse(jsonString)
,可以将json响应转换回js对象文字。
从那时起就不需要迭代该对象,因为你可以像任何其他js对象一样导航它,这可以通过两种方式完成
js方式 - >点符号
var obj = JSON.parse(jsonStirng);
var value = obj.value;
或者像php数组
var value = obj["value"];