在.json数组上执行.length返回undefined

时间:2014-01-28 10:45:08

标签: javascript php ajax json

我有来自ajax调用的json编码数组

{"country":{"0":"United States of America","United States of America":{"states":{"0":"Alaska","Alaska":{"cities":["Adak","Akiachak","Akiak","Akutan","Alakanuk"]}}}}}

以下是我的ajax代码

$.ajax({
   method: "POST",
   url: "test.php",
   data: "action=2",
   cache: 'false',
   success: function(abcd){
     alert(abcd);
     var obj = new Array();
     var obj = $.parseJSON(abcd);
     alert(obj.country.length);
   }
});

当我尝试使用obj.country[0]时,它会返回“美利坚合众国”。但是当我尝试使用obj.country.length获取数组的长度时,它返回undefined

我浏览过几篇帖子,唯一不同的是我可以看到使用dataType:json并使用header()将内容类型定义到.php页面上的json。我已经尝试了两种方法,但这两种方法都没有用。在.php页面上,我已经声明了以下数组:

$data = array();
$data['country'] = array();
$data['country']['United States of America'] = array();
$data['country']['United States of America']['states'] = array();
$data['country']['United States of America']['states']['Alaska']['cities'] = array();

2 个答案:

答案 0 :(得分:3)

这是因为obj.country不是数组,而是对象。

对象用大括号({})括起来,数组用方括号([])括起来。有关详细信息,请参阅http://json.org/

在您的示例内容中,"cities":["Adak","Akiachak","Akiak","Akutan","Alakanuk"]将是一个数组,您可以使用obj["country"]["United States of America"]["states"]["Alaska"]["cities"]调用该数组。


所以,从你的例子来看,这可行:

$us['name'] = "United";
$alaska['name'] = "Alaska";
$alaska['cities'] = array("city1", "city2");
$us['states'] = array($alaska)
$data = array($us);

我希望它会呈现[{"name": "United", "states": [{"name":"Alaska", "cities": ["city1","city2"]}]}]

我确信它可以做得更好或更紧凑,但我在这方面没有太多PHP经验。

答案 1 :(得分:0)

这个怎么样?

alert((Object.keys(obj.country) || []).length);