尝试访问JSON值时接收第n个字符

时间:2013-02-02 17:48:03

标签: json

访问从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

1 个答案:

答案 0 :(得分:3)

您不希望将JSON放在引号中,所以:

var latlag = <?php echo json_encode($coordinates); ?>;

(从技术上讲,这根本不是JSON,它是一个JavaScript对象初始化程序。但没关系,JSON是初始化程序语法的子集,因此所有有效的JSON文本也都是有效的JavaScript初始化程序。) < / p>

如果结构与您引用的结构非常相似,那么它就是一个包含一个条目的数组,这是一个具有名称为12801258的属性的对象,其值为具有名为latlng的属性的对象。所以你可以访问这样的:

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]),但自然1280latlng[0]["0012"]不同,因为后者使用latlng[0][12]而非"12"作为属性名称。如果你知道你将没有前导零,你可以抛弃引号。