【问题标题】:How to parse a JSON string using PHP如何使用 PHP 解析 JSON 字符串
【发布时间】:2011-07-28 11:27:19
【问题描述】:

我有一个包含 1-n 个 lat/lng 记录的 JSON 字符串。它看起来像这样:

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

什么是解析这个以获取 lat/lng 值循环的好方法?转义的双引号会影响解析吗?

谢谢, 亚历克斯

【问题讨论】:

  • 试试json_decode
  • 为什么里面有那些斜线??
  • 因为它是用双引号括起来的。
  • @lucifurious:可能是因为打开了magic_quotes_gpc。

标签: php json parsing


【解决方案1】:

使用json_decode.

您需要先取消转义引号;只需使用

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

【讨论】:

    【解决方案2】:

    JSON_decode 并删除转义引号

    【讨论】:

      【解决方案3】:

      在您的情况下,最好使用:

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

      请注意,在 PHP 中您的浮点值会丢失一些精度。

      【讨论】:

      • 有没有办法通过这个操作来保持 PHP 中浮点值的精度?它们的浮点值非常重要。
      • 如果他用双引号括起来,他不需要转义字符串。他的 JSON 在 {},{} 附近丢失了 [],就像你展示的那样。 @Genadinik,9 位小数对于纬度和经度来说还不够吗?
      • @Genadinik:不使用 json_decode。而且您无法在 PHP 中处理更精确的数字,它只知道float。丢失的精度是最小的,我实际上怀疑 Javascript 表示也不是太精确。 (一种解决方法是手动解析,并对所有坐标使用 gmp 函数:php.net/manual/en/ref.gmp.php - 在整个应用程序中。)
      • 它对我有用,即使数据被插入到数组中,所以我必须使用 array[0]['data'] 检索它
      【解决方案4】:
      $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
              )
      
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-24
        • 2014-01-24
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多