Преобразование строки в объект JSON php


У меня есть следующий результат от sql-запроса:

{"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

РЕДАКТИРОВАТЬ: ИЗВИНИТЕ, РЕБЯТА, Я ВСТАВИЛ СТАРУЮ/НЕПРАВИЛЬНУЮ СТРОКУ!

Author: user2363025, 2013-07-05

4 answers

То, что сказал @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) для преобразования строки в массив/объект (стандартный класс): 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)"}]}';

Вы должны преобразовать его в Массив/объект (стандартный класс):

$manage = json_decode($data);

Но работа с stdClass сложнее, чем с PHP-массивом, тогда попробуйте следующее:

$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);
}

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

Удачи.

 73
Author: Guilherme Nascimento, 2013-07-06 22:21:14

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

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

$jObj = json_decode($jsonString);

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

$jArr = json_decode($jsonString, true);

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

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

И у вас будет допустимая строка JSON..

Вот ваша строка JSON, которую я преобразовал в допустимую: http://pastebin.com/R16NVerw

 12
Author: Miro Markaravanes, 2013-07-05 12:13:56

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

$array = json_decode($sting,true)

Но проверьте Json раньше. Вы можете проверить с помощью http://jsonviewer.stack.hu/

 4
Author: Nabeel Arshad, 2013-07-05 12:26:20

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

И посмотрите еще раз Допустимый JSON

 -1
Author: drag.spas, 2013-07-05 12:01:19