将 JSON 字符串化为 PHP 对象

Stringified JSON to PHP Object

我有这个 JSON 对象:

{
  "type": "FeatureCollection",
  "features": [
    {
      "id": "0eb3d8a7d9afa466766e90b47f2bd785",
      "type": "Feature",
      "properties": {
        "feature-description": "<div id=\"content\">html content here</div>"
      },
      "geometry": {
        "coordinates": [
          [
            [
              144.87452272951856,
              -37.72702750630904
            ],
            [
              145.00292543948336,
              -37.78131678501029
            ],
            [
              145.12926821291518,
              -37.732458226660285
            ],
            [
              145.11278872073137,
              -37.70801684893612
            ],
            [
              144.9184680420177,
              -37.72431199679091
            ],
            [
              144.87452272951856,
              -37.72702750630904
            ]
          ]
        ],
        "type": "Polygon"
      }
    }
  ]
}

如果我 JSON.stringify 它并尝试在 PHP 中解码:

$jsonString = '"{\n  \"type\": \"FeatureCollection\",\n  \"features\": [\n    {\n      \"id\": \"0eb3d8a7d9afa466766e90b47f2bd785\",\n      \"type\": \"Feature\",\n      \"properties\": {\n        \"feature-description\": \"<div id=\"content\">html content here</div>\"\n      },\n      \"geometry\": {\n        \"coordinates\": [\n          [\n            [\n              144.87452272951856,\n              -37.72702750630904\n            ],\n            [\n              145.00292543948336,\n              -37.78131678501029\n            ],\n            [\n              145.12926821291518,\n              -37.732458226660285\n            ],\n            [\n              145.11278872073137,\n              -37.70801684893612\n            ],\n            [\n              144.9184680420177,\n              -37.72431199679091\n            ],\n            [\n              144.87452272951856,\n              -37.72702750630904\n            ]\n          ]\n        ],\n        \"type\": \"Polygon\"\n      }\n    }\n  ]\n}"';

$json = json_decode( $jsonString );
echo gettype($json); // string

我仍然得到 string,而不是 object。我做错了什么?

您刚刚在开头和结尾添加了 一个额外的双引号 "。只需删除它们,它就会按您预期的那样工作。

<?php
$jsonString = '{"type":"FeatureCollection","features":[{"id":"0eb3d8a7d9afa466766e90b47f2bd785","type":"Feature","properties":{"feature-description":"<div id=\"content\">html content here</div>"},"geometry":{"coordinates":[[[144.87452272951856,-37.72702750630904],[145.00292543948336,-37.78131678501029],[145.12926821291518,-37.732458226660285],[145.11278872073137,-37.70801684893612],[144.9184680420177,-37.72431199679091],[144.87452272951856,-37.72702750630904]]],"type":"Polygon"}}]}';
$json = json_decode( $jsonString );
echo gettype($json); // object

工作演示: https://3v4l.org/N56DS

您可能不想将其字符串化。你可以通过 json_decode 传递它,它会起作用:

$jsonString = '{
  "type": "FeatureCollection",
  "features": [
    {
      "id": "0eb3d8a7d9afa466766e90b47f2bd785",
      "type": "Feature",
      "properties": {
        "feature-description": "<div id=\"content\">html content here</div>"
      },
      "geometry": {
        "coordinates": [
          [
            [
              144.87452272951856,
              -37.72702750630904
            ],
            [
              145.00292543948336,
              -37.78131678501029
            ],
            [
              145.12926821291518,
              -37.732458226660285
            ],
            [
              145.11278872073137,
              -37.70801684893612
            ],
            [
              144.9184680420177,
              -37.72431199679091
            ],
            [
              144.87452272951856,
              -37.72702750630904
            ]
          ]
        ],
        "type": "Polygon"
      }
    }
  ]
}';

$json = json_decode($jsonString, true);
echo gettype($json); // string

var_dump($json);

输出

array(2) {
  ["type"]=>
  string(17) "FeatureCollection"
  ["features"]=>
  array(1) {
    [0]=>
    array(4) {
      ["id"]=>
      string(32) "0eb3d8a7d9afa466766e90b47f2bd785"
      ["type"]=>
      string(7) "Feature"
      ["properties"]=>
      array(1) {
        ["feature-description"]=>
        string(41) "<div id="content">html content here</div>"
      }
      ["geometry"]=>
      array(2) {
        ["coordinates"]=>
        array(1) {
          [0]=>
          array(6) {
            [0]=>
            array(2) {
              [0]=>
              float(144.87452272952)
              [1]=>
              float(-37.727027506309)
            }
            [1]=>
            array(2) {
              [0]=>
              float(145.00292543948)
              [1]=>
              float(-37.78131678501)
            }
            [2]=>
            array(2) {
              [0]=>
              float(145.12926821292)
              [1]=>
              float(-37.73245822666)
            }
            [3]=>
            array(2) {
              [0]=>
              float(145.11278872073)
              [1]=>
              float(-37.708016848936)
            }
            [4]=>
            array(2) {
              [0]=>
              float(144.91846804202)
              [1]=>
              float(-37.724311996791)
            }
            [5]=>
            array(2) {
              [0]=>
              float(144.87452272952)
              [1]=>
              float(-37.727027506309)
            }
          }
        }
        ["type"]=>
        string(7) "Polygon"
      }
    }
  }
}