我正在尝试使用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
]
]
]
]
}
答案 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]]]]}