1

无法访问由 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 之外的唯一结果是第 n 个字符,latlng就好像它被当作字符串一样对待?!

alert(latlng[10]); # {
alert(latlng[1280]['lat]); # undefined 
alert(latlng['1280'].lat); # undefined
4

1 回答 1

3

您不想将 JSON 放在引号中,因此:

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

(从技术上讲,这根本不是 JSON,它是一个 JavaScript 对象初始化器。不过没关系,JSON 是初始化器语法的子集,因此所有有效的 JSON 文本也是有效的 JavaScript 初始化器。)

如果结构确实如您所引用的那样,则它是一个包含一个条目的数组,它是一个具有名为1280and1258的属性的对象,其值是具有名为latand的属性的对象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]是字符串,所以andlatlng["0"]["1280"]都表示相同的意思(因为 the0和 the1280被转换为字符串 [yes, really]),但自然latlng[0]["0012"]不一样,latlng[0][12]因为后者使用"12", not "0012", as属性名称。如果你知道你不会有前导零,你可以放弃引号。

于 2013-02-02T17:49:30.380 回答