2011-04-03 13 views
2

1-n個のlat/lngレコードを持つJSON文字列があります。これは次のようになります。PHPを使用してJSON文字列を解析する方法

{\"lat\":37.790388261934424,\"lng\":-122.46047996826172},{\"lat\":37.789608231530124,\"lng\":-122.46344112701416} 

緯度/経線値ループを得るには、これを解析する良い方法はありますか?エスケープされた二重引用符は解析に影響しますか?

あなたが最初の引用符をエスケープ解除する必要がありますおかげで、 アレックス

+1

してみてください[json_decode](http://php.net/manual/en/function.json-decode.php) – ysrb

+1

なぜそれが中にそれらのスラッシュを持っていませんそれ?? – lucifurious

+0

二重引用符で囲まれているためです。 –

答えて

5
$ll = '[{"lat":37.790388261934424,"lng":-122.46047996826172},{"lat":37.789608231530124,"lng":-122.46344112701416}]'; 
$ll = json_decode($ll); 
print_r($ll); 

プリント...

Array 
(
    [0] => stdClass Object 
     (
      [lat] => 37.7903882619 
      [lng] => -122.460479968 
     ) 

    [1] => stdClass Object 
     (
      [lat] => 37.7896082315 
      [lng] => -122.463441127 
     ) 

) 
5

使用json_decode.

。ただ

$unescaped_data = str_replace('\"','"',$data) 
3

を引用し、それを使用するのが最善です:あなたはPHPでの浮動小数点値にいくつかの精度を失うことになる

$array = json_decode(stripslashes("[$input_string]"), 1); 

注意。

+0

この操作でPHPで浮動小数点値の精度を保持する方法はありますか?フロート値はかなり重要です。 – Genadinik

+0

二重引用符で囲んだ場合、文字列をエスケープする必要はありません。彼のJSONはあなたが示したように '{}、{}'の周りに '[]'がありません。 @Genadinik、LatとLonでは9小数では不十分ですか? –

+0

@Genadinik:json_decodeではありません。また、PHPでより正確な数値を扱うことはできません。浮動小数点数を知っているだけです。失われた精度は最小です、そして、私は実際にはJavascriptの表現が過度に正確ではないと考えています。 (回避策は、手で解析し、すべての座標にgmp関数を使用することです:http://www.php.net/manual/en/ref.gmp.php - アプリケーション全体で) – mario

関連する問題