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以外の唯一の結果はlatlng、文字列のように扱われるかのようにn番目の文字でしたか?!

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初期化子です。)

構造が実際に引用したとおりである場合、それは1つのエントリを持つ配列です。これは、およびのような名前のプロパティを持つオブジェクトで1280あり1258、その値は、という名前latのプロパティを持つオブジェクトlngです。したがって、次のようなものにアクセスします。

alert(latlng[0]["1280"].lat);

latlngは配列でlatlng[0]あり、はそれが保持する1つのオブジェクトであり、latlng[0]["1280"]{"lat":"-1.197070","lng":"-1.197070"}オブジェクトです。

なぜ私が1280上記の周りに引用符を使用したのか疑問に思われるかもしれません。これは、これらのキーが文字列として明確に指定されているためです(JavaScript初期化子では必要ありませんが、JSONで必要です)。そのため、のようなエントリがないかどうかはわかりません"0012"。プロパティ名は、文字列として記述されていない場合でも常に文字列であるためlatlng[0][1280]latlng["0"]["1280"]どちらも同じことを意味します(0とは1280文字列に変換されるため[はい、本当に])が、後者は、としてではなく、を使用するため、当然latlng[0]["0012"]同じではありません。プロパティ名。先行ゼロがないことがわかっている場合は、引用符を削除できます。latlng[0][12]"12""0012"

于 2013-02-02T17:49:30.380 に答える