2012-08-08 50 views
0

我已经从一个AJAX调用该数据响应:Multidim JSON数组的javascript,如何抓住值

{"18:00":{"twopersons":1,"fourpersons":0}} 

它获取由statsarray = data;

查阅存储到一个变量如何能i循环通过statsarray和输出twopersons值?

所以我可以提醒:

18:00 - There's 2 x 2persons and 0 x 4persons 

这里是Ajax调用:

var statsarray; 
var currentloopeddate = test_date.toString('yyyy-MM-dd') 
$.post("/home/sessions", 
    { action: 'partner_calendar_checkseats', date: currentloopeddate }, 
    function(data) { statsarray = data; } 
); 
+1

循环'statsarray'?或者更确切地说是访问“twopersons”? – Alexander 2012-08-08 11:20:04

+2

这不是一个数组 – Roest 2012-08-08 11:20:11

+0

你有一个很好的声誉。你尝试过什么吗? – 2012-08-08 11:20:44

回答

2

只需做到以下几点:

var twopersons = data["18:00"].twopersons; 
var fourpersons = data["18:00"]["fourpersons"]; 

(两种变体是可能的)

变体将是:

var shorter = data["18:00"]; 
var twopersons = data.twopersons; 
// ... 
+0

未锻炼未被捕获TypeError:无法读取未定义的属性'18:00' – Karem 2012-08-08 11:32:44

+0

更新的问题与ajax呼叫 – Karem 2012-08-08 11:41:05

+0

然后用数据替换响应,当然你不能简单地使用复制和粘贴... – DerWaldschrat 2012-08-08 12:10:06

1

喜欢的东西:

var tst = {"18:00":{"twopersons":1,"fourpersons":0}}; 
for(k in tst) { 
    for(var z in tst[k]) { 
    console.log(k + ": Theres "+tst[k][z] + " X " + z); 
    } 
} 
+0

不需要*缩小*;) – Alexander 2012-08-08 11:29:55

+0

我会添加'.hasOwnProperty'检查以确保它不会与扩展Object.prototype的库断开(请参阅我的答案) – rsp 2012-08-08 11:56:51

0

你可以尝试这样的事情:

更新:更好的例子

var statsarray = {"18:00":{"twopersons":1,"fourpersons":0}}; 

var hour, persons, line, array; 
for (hour in statsarray) { 
    if (statsarray.hasOwnProperty(hour)) { 
     array = []; 
     for (persons in statsarray[hour]) { 
      if (statsarray[hour].hasOwnProperty(persons)) { 
       array.push(statsarray[hour][persons] + " x " + persons); 
      } 
     } 
     line = hour + " - There's " + array.join(' and '); 
     alert(line); 
    } 
} 

参见:DEMO

不幸的是,您必须使用.hasOwnProperty进行测试,以确保它可以与某些库一起工作。

UPDATE:你已经从你的AJAX调用在你的问题中添加的代码和我注意到,你声明statsarray变量回调函数,但是一些值赋给变量回调。请记住,您必须在之内运行您的迭代代码,该函数是AJAX回调函数,其中包含:statsarray = data; - 紧跟在此行之后,以确保实际上有一些值可以迭代。