我有来自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();
答案 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);