2014-01-29 4 views
1

Я пытаюсь сгенерировать объект JSON с использованием PHP, который будет передан клиенту с использованием данных, которые уже хранятся в базе данных MySQL.Создание объекта JSON из многомерного массива, хранящегося в виде строки

База данных содержит список MultiPolygon координат, как показано ниже в одном текстовом поле:

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

При попытке сгенерировать объект JSON с использованием json_encode я получаю следующее:

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

И из-за котировок вокруг самих координат, они не распознаются JavaScript как объект JSON.

Я попытался взорвать координатную строку, а затем снова установить ее вручную, но для ее работы все еще требуется много хаков. Любая помощь в получении этого вывода в качестве фактического объекта JSON в PHP будет высоко оценена.

Я пытаюсь получить на это:

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

** показать код php **, как вы получаете данные из базы данных, как вы назначаете ее переменной? –

+1

Не могли бы вы просто передать свою строку через 'JSON.parse()'? – Scuzzy

+1

Или через ['json_decode'] (http://us2.php.net/json_decode) на стороне сервера. – user113215

ответ

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); 
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]]]]} 
+1

Почему нисходящий сигнал, что не так? –

Смежные вопросы