从存储为字符串的多维数组创建JSON对象

时间:2014-01-29 01:42:38

标签: php json

我正在尝试使用PHP生成一个JSON对象,使用已存储在MySQL数据库中的数据传递给客户端。

数据库在单个文本字段中包含如下所示的多面坐标列表:

[
  [
      [
          [
              104.39209000000005,
              -4.850154
          ],
          [
              108.17138687500005,
              -3.721745195827911
          ],
          [
              112.12646500000005,
              -1.274309
          ],
          [
              103.02978499999995,
              -3.579213
          ]
      ]
  ]
]

当我尝试使用json_encode生成JSON对象时,我得到以下内容:

{
  "coordinates": "[[[[104.39209000000005,-4.850154],[108.17138687500005,-3.721745195827911],[112.12646500000005,-1.274309],[103.02978499999995,-3.579213]]]]"
}

由于坐标本身的引号,JavaScript不会将它们识别为JSON对象。

我试图爆炸坐标字符串,然后手动将它重新组合在一起,但它仍然需要大量的黑客才能使其正常工作。 将此作为PHP中的实际JSON对象输出的任何帮助将非常感激。

我正试图解决这个问题:

{
  "coordinates": [
      [
          [
              [
                  104.39209000000005,
                  -4.850154
              ],
              [
                  108.17138687500005,
                  -3.721745195827911
              ],
              [
                  112.12646500000005,
                  -1.274309
              ],
              [
                  103.02978499999995,
                  -3.579213
              ]
          ]
      ]
  ]
}

2 个答案:

答案 0 :(得分:0)

它非常易于操纵,但你可以这样做:

$string = json_encode( $database_value ); // same as you're using now
$string = str_replace( '"', '', $string ); // get rid of the quotes

// wrap them back around 'coordinates'
$string = str_replace( 'coordinates', '"coordinates"', $string );

答案 1 :(得分:0)

只需在json_decode之前使用json_encode,就像这样:

// This comes from the database, of course
$coords = '[[[[104.39209000000005,-4.850154],[108.17138687500005,-3.721745195827911],[112.12646500000005,-1.274309],[103.02978499999995,-3.579213]]]]';

echo json_encode(array(
    'coordinates' => json_decode($coords)
));

这将完全按照您的意愿输出嵌套数组:

{"coordinates":[[[[104.39209,-4.850154],[108.171386875,-3.7217451958279],[112.126465,-1.274309],[103.029785,-3.579213]]]]}