2013-07-05 2 views
28

У меня есть следующий результат SQL-запроса:Преобразовать строку в JSON объект PHP

{"Coords":[ 
    {"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"}, 
    {"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"}, 
    {"Accuracy":"65","Latitude":"53.27770755361785","Longitude":"-9.011979642121824","Timestamp":"Fri Jul 05 2013 12:02:09 GMT+0100 (IST)"}, 
    {"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"}, 
    {"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"} 
    ] 
} 

В настоящее время строка в PHP, есть простой способ, чтобы преобразовать это в объект JSON (я знаю это уже в форме JSON).

Мне это нужно, чтобы быть объектом, так что я могу добавить дополнительный пункт/элемент/объект как то, что COORDS уже

EDIT: ОГОРЧЕННО РЕБЯТА, я наклеенные СТАРЫЕ/НЕПРАВИЛЬНО STRING!

+12

Это недопустимо JSON. Вам будет трудно преобразовать это во что угодно. – deceze

+0

@deceze Что недействительно? – user2363025

+7

@ user2363025 проверить это на http://jsonlint.com/ –

ответ

61

что @deceze сказал правильно, кажется, что ваш JSON имеет неверный формат, попробуйте следующее:

{ 
    "Coords": [{ 
     "Accuracy": "30", 
     "Latitude": "53.2778273", 
     "Longitude": "-9.0121648", 
     "Timestamp": "Fri Jun 28 2013 11:43:57 GMT+0100 (IST)" 
    }, { 
     "Accuracy": "30", 
     "Latitude": "53.2778273", 
     "Longitude": "-9.0121648", 
     "Timestamp": "Fri Jun 28 2013 11:43:57 GMT+0100 (IST)" 
    }, { 
     "Accuracy": "30", 
     "Latitude": "53.2778273", 
     "Longitude": "-9.0121648", 
     "Timestamp": "Fri Jun 28 2013 11:43:57 GMT+0100 (IST)" 
    }, { 
     "Accuracy": "30", 
     "Latitude": "53.2778339", 
     "Longitude": "-9.0121466", 
     "Timestamp": "Fri Jun 28 2013 11:45:54 GMT+0100 (IST)" 
    }, { 
     "Accuracy": "30", 
     "Latitude": "53.2778159", 
     "Longitude": "-9.0121201", 
     "Timestamp": "Fri Jun 28 2013 11:45:58 GMT+0100 (IST)" 
    }] 
} 

Использование json_decode($string) для преобразования строки в массив/Object (StdClass): http://php.net/manual/en/function.json-decode.php

[редактировать]

Я не понимаю, что ты имеешь в виду "официального объекта JSON", но предположим, что вы хотите добавить контент в json через PHP, а затем преобразуете его обратно в JSON?

если у вас есть следующие переменные:

$data = '{"Coords":[{"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27770755361785","Longitude":"-9.011979642121824","Timestamp":"Fri Jul 05 2013 12:02:09 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"}]}'; 

Вы должны преобразовать его в Array/Object (StdClass):

$manage = json_decode($data);

Но работа с StdClass является более сложным, чем PHP -Array, затем попробуйте следующее:

$manage = (array) json_decode($data);

таким образом, вы можете использовать функции массива: http://php.net/manual/en/function.array.php

добавляющие элемент:

$manage = (array) json_decode($data); 

echo 'Before: <br>'; 
print_r($manage); 

$manage['Coords'][] = Array(
    'Accuracy' => '90' 
    'Latitude' => '53.277720488429026' 
    'Longitude' => '-9.012038778269686' 
    'Timestamp' => 'Fri Jul 05 2013 11:59:34 GMT+0100 (IST)' 
); 

echo '<br>After: <br>'; 
print_r($manage); 

удалить первый элемент:

$manage = (array) json_decode($data); 
echo 'Before: <br>'; 
print_r($manage); 
array_shift($manage['Coords']); 
echo '<br>After: <br>'; 
print_r($manage); 

любой шанс, что вы хотите сохранить json к базе данных или файл:

$data = '{"Coords":[{"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.277720488429026","Longitude":"-9.012038778269686","Timestamp":"Fri Jul 05 2013 11:59:34 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27770755361785","Longitude":"-9.011979642121824","Timestamp":"Fri Jul 05 2013 12:02:09 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"},{"Accuracy":"65","Latitude":"53.27769091555766","Longitude":"-9.012051410095722","Timestamp":"Fri Jul 05 2013 12:02:17 GMT+0100 (IST)"}]}'; 

$manage = (array) json_decode($data); 

$manage['Coords'][] = Array(
    'Accuracy' => '90' 
    'Latitude' => '53.277720488429026' 
    'Longitude' => '-9.012038778269686' 
    'Timestamp' => 'Fri Jul 05 2013 11:59:34 GMT+0100 (IST)' 
); 

if(($id = fopen('datafile.txt','w'))){ 
    fwrite($id,json_encode($manage)); 
    fclose($id); 
} 

Я надеюсь, я понял ваш вопрос.

Удачи.

+0

благодарит за конструктивную помощь – user2363025

+2

json_decode сделал трюк .. спасибо – zeetit

+0

Спасибо, что вытаскивали мои волосы о том, почему массив, который я нажимаю на другой массив, отображается как строка вместо объекта. –

0

Попробуйте с json_encode().

И еще раз посмотреть Valid JSON

+3

Пожалуйста, проверьте это: http://w3fools.com/ – Dan

10

Чтобы преобразовать допустимую строку JSON обратно, вы можете использовать метод json_decode().

Чтобы преобразовать его обратно в использовании объекта этот метод:

$jObj = json_decode($jsonString); 

И чтобы преобразовать его в ассоциативный массив, установите второй параметр true:

$jArr = json_decode($jsonString, true); 

Кстати, чтобы преобразовать ваша указанная строка возвращается к любой из этих строк, вы должны иметь действительную строку JSON. Для того, чтобы достичь этого, вы должны сделать следующее:

  1. В Coords массиве, удалите два " (двойные кавычки) с самого начала и конца объекта.
  2. объектов в массиве запятых, seprated (,), поэтому добавьте запятых между объектами в Coords массиве ..

И вы будете иметь действительный JSON строку ..

Вот ваш JSON Строка I преобразуется в действительный один: http://pastebin.com/R16NVerw

3

вы можете использовать

$array = json_decode($sting,true) 

, но до проверки JSon. Вы можете подтвердить свой пароль: http://jsonviewer.stack.hu/