访问从php数组
形成的json值时遇到问题var latlag = '<?php echo json_encode($coordinates); ?>';
alert(latlng)
产生:
[{
"1280":{"lat":"-1.197070","lng":"-1.197070"},
"1239":{"lat":"-1.222410","lng":"-1.222410"},
"1258":{"lat":"-1.153020","lng":"-1.153020"},
...
}]
我尝试了各种方法来访问特定ID的lat和lag,除了undefined之外,唯一的结果是latlng
的第n个字符,好像它被视为字符串一样?!
alert(latlng[10]); # {
alert(latlng[1280]['lat]); # undefined
alert(latlng['1280'].lat); # undefined
答案 0 :(得分:3)
您不希望将JSON放在引号中,所以:
var latlag = <?php echo json_encode($coordinates); ?>;
(从技术上讲,这根本不是JSON,它是一个JavaScript对象初始化程序。但没关系,JSON是初始化程序语法的子集,因此所有有效的JSON文本也都是有效的JavaScript初始化程序。) < / p>
如果结构与您引用的结构非常相似,那么它就是一个包含一个条目的数组,这是一个具有名称为1280
和1258
的属性的对象,其值为具有名为lat
和lng
的属性的对象。所以你可以访问这样的:
alert(latlng[0]["1280"].lat);
latlng
是数组,latlng[0]
是它拥有的一个对象,latlng[0]["1280"]
是{"lat":"-1.197070","lng":"-1.197070"}
对象。
您可能想知道为什么我在1280
上方使用了引号。这是因为这些键明确地以字符串形式给出(如JSON中所要求的,但不是在JavaScript初始化器中),因此我不能确定没有像"0012"
这样的条目。属性名称总是字符串,即使没有写成字符串,因此latlng[0][1280]
和latlng["0"]["1280"]
都意味着相同的事情(因为0
和{{1}转换为字符串[yes,really]),但自然1280
与latlng[0]["0012"]
不同,因为后者使用latlng[0][12]
而非"12"
作为属性名称。如果你知道你将没有前导零,你可以抛弃引号。