Подтвердить что ты не робот

Преобразование строки в объект 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).

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

РЕДАКТИРОВАТЬ: ИЗБЕЖАТЬ ПАРНИКОВ, Я ПРОШЕЛ СТАРЫЙ/НЕПРАВИЛЬНЫЙ СТРОК!

4b9b3361

Ответ 1

То, что @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)"}]}';

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

$manage = json_decode($data);

Но работать с stdClass сложнее, чем с PHP-Array, затем попробуйте это (используйте второй параметр с true):

$manage = json_decode($data, true);

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

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

$manage = json_decode($data, true);

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 = json_decode($data, true);
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 = json_decode($data, true);

$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', 'wb'))) {
    fwrite($id, json_encode($manage));
    fclose($id);
}

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

Удачи.

Ответ 2

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

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

$jObj = json_decode($jsonString);

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

$jArr = json_decode($jsonString, true);

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

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

И у вас будет действующая строка JSON..

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

Ответ 3

Вы можете использовать это, например,

$array = json_decode($string,true)

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