Кодирование JSON с проблемами PHP с массивом

это простой вопрос. Я пытаюсь использовать библиотеку в реальном времени листовки, но для ее загрузки требуется конкретный вывод JSON, такой как:

data: {"type":"Feature","geometry":{"type":"Point","coordinates":[-85.26995166666667,35.056891]},"properties":{"color":"#FFFFFF","route":"U"},"id":"118"} 

пока это все, что я получил:

 [{"type":"Feature","coordinates":["-34.66159","-59.42428"],"color":"#FFFFFF","route":"u", id:118}] 

это мой PHP

  $id=$row['id']; $type=$row['type']; $lat=$row['lat']; $lng=$row['lng']; $color=$row['color']; $route=$row['route']; $data [] = array('id'=> $id, 'type'=> $type,'coordinates'=> $lnglat = array ($lat, $lng), 'colour'=> $colour, 'route'=> $route); $json_string = json_encode($data); echo $json_string; 

Это сводит с ума … Я все пробовал .. Я читал много учебников json_encode … но я не могу найти пример или такую ​​ситуацию, как моя.

Пожалуйста помоги!

Спасибо!

Попробуйте декодировать json вам нужно создать, чтобы посмотреть, как выглядит структура данных PHP :

 $json='{"type":"Feature","geometry":{"type":"Point","coordinates":[-85.26995166666667,35.056891]},"properties":{"color":"#FFFFFF","route":"U"},"id":"118"}'; $data = json_decode($json, TRUE); print_r($data); 

Выход:

 Array ( [type] => Feature [geometry] => Array ( [type] => Point [coordinates] => Array ( [0] => -85.269951666667 [1] => 35.056891 ) ) [properties] => Array ( [color] => #FFFFFF [route] => U ) [id] => 118 ) 

Теперь ваш код должен выглядеть так:

 $data = array( 'type' => $type, 'geometry' => array( 'type' => 'Point', 'coordinates' => array($lat, $lng), ), 'properties' => array( 'color' => $color, 'route' => $route, ), 'id' => $id, ); echo(json_encode($data)); 

UPDATE: как замечает @ paul-crovella в комментарии, используя var_export() вместо print_r() в первом фрагменте кода производит непосредственно PHP-код, очень похожий на тот, который отображается выше (за исключением переменных / значений), который может быть скопирован -pasted в ваш код и используется путем замены значений ( 'Features' , 35.056891 , '#FFFFFF' aso) с соответствующими переменными ( $type , $lng , $color т. д.).

Вы можете попробовать следующее:

 $id = 1; $type = "type"; $lat = 42.565; $lng = 19.6464; $colour = "Color"; $route = "Route"; $data = array('id' => $id, 'type' => $type, 'coordinates' => $lnglat = array($lat, $lng), 'colour' => $colour, 'route' => $route); $json_string = json_encode(array('data' => $data)); echo $json_string; 

Удалите [] из $data .

Выход:

 {"data":{"id":1,"type":"type","coordinates":[42.565,19.6464],"colour":"Color","route":"Route"}} 

Это будет работать для вас:

 $dataArray = array('id'=> $id, 'type'=> $type,'coordinates'=> $lnglat = array ($lat, $lng), 'colour'=> $colour, 'route'=> $route); $json_string = json_encode(array('data'=>$dataArray)); echo $json_string; 

Ваше назначение массиву $data должно выглядеть следующим образом:

 $data['data'] = array( 'id' => $id, 'type' => $type, 'coordinates' => $lnglat = array($lat, $lng), 'colour' => $color, 'route' => $route ); 

PS У вас также была опечатка в переменной $color .

Вы пробовали это:

 $id=$row['id']; $type=$row['type']; $lat=$row['lat']; $lng=$row['lng']; $color=$row['color']; $route=$row['route']; $data [] = array('id'=> $id, 'type'=> $type,'coordinates'=> $lnglat = array ($lat, $lng), 'colour'=> $colour, 'route'=> $route); $json_string = json_encode(array('data'=>$data)); echo $json_string; 

Все, что я сделал, это добавить еще один уровень в array() :

 $json_string = json_encode($data); 

В этом:

 $json_string = json_encode(array('data'=>$data)); 

Редактировать:

 $data['data'] = array('id'=> $id, 'type'=> $type,'coordinates'=> $lnglat = array ($lat, $lng), 'colour'=> $colour, 'route'=> $route); $json_string = json_encode($data); echo $json_string; 

ИЛИ

 $data = array('id'=> $id, 'type'=> $type,'coordinates'=> $lnglat = array ($lat, $lng), 'colour'=> $colour, 'route'=> $route); $json_string = json_encode(array('data'=>$data)); echo $json_string;