I Shar

I Shar

мир глазами веб-разработчика

PHP: разбираем JSON

как преобразовать данные JSON с помощью php

I Shar

время чтения 3 мин.

Photo by Brooke Lark on Unsplash

Независимо от того, каким образом получены данные в формате JSON: в виде файла *.json переданного из стороннего API или входящей строки, нативный PHP, начиная с версии 5.2.0, предоставляет две замечательные функции json_encode и json_decode. Сегодня мы обратим внимание на функцию json_decode, которая позволяет преобразовать данные JSON в формат, пригодный для дальнейшей работы.

Итак, для начала нам нужны какие-то JSON-данные, и мы получим их, благодаря генератору случайных данных Mockaroo.

Например,такие:

[{
  "id": 1,
  "first_name": "Bertrando",
  "last_name": "Pedrollo",
  "email": "[email protected]",
  "gender": "Male",
  "ip_address": "62.137.20.86"
}, {
  "id": 2,
  "first_name": "Pier",
  "last_name": "Winkworth",
  "email": "[email protected]",
  "gender": "Female",
  "ip_address": "158.139.30.200"
}, {
  "id": 3,
  "first_name": "Joyous",
  "last_name": "Glascott",
  "email": "[email protected]",
  "gender": "Female",
  "ip_address": "146.147.52.106"
}, {
  "id": 4,
  "first_name": "Daniela",
  "last_name": "Hawes",
  "email": "[email protected]",
  "gender": "Female",
  "ip_address": "148.153.203.134"
}]

json_decode

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

Входящие JSON-данные всгеда являются строкой, как же их преобразовать? Посмотрим на код приведенный ниже:

$json = '[{ "id": 1, "first_name": "Bertrando", "last_name": "Pedrollo", "email": "[email protected]", "gender": "Male", "ip_address": "62.137.20.86" }, { "id": 2, "first_name": "Pier", "last_name": "Winkworth", "email": "[email protected]", "gender": "Female", "ip_address": "158.139.30.200" }, { "id": 3, "first_name": "Joyous", "last_name": "Glascott", "email": "[email protected]", "gender": "Female", "ip_address": "146.147.52.106" }, { "id": 4, "first_name": "Daniela", "last_name": "Hawes", "email": "[email protected]", "gender": "Female", "ip_address": "148.153.203.134" }]';
$decodedJson = json_decode($json);
var_dump($decodedJson);

После преобразования JSON-данных с помощью функции json_decode, мы вывели их на странцу. Можно увидеть, что полученный результат - массив объектов (stdClass):

array(4) {
[0]=> object(stdClass)#1 (6) { ["id"]=> int(1) ["first_name"]=> string(9) "Bertrando" ["last_name"]=> string(8) "Pedrollo" ["email"]=> string(24) "[email protected]" ["gender"]=> string(4) "Male" ["ip_address"]=> string(12) "62.137.20.86" }
[1]=> object(stdClass)#2 (6) { ["id"]=> int(2) ["first_name"]=> string(4) "Pier" ["last_name"]=> string(9) "Winkworth" ["email"]=> string(19) "[email protected]" ["gender"]=> string(6) "Female" ["ip_address"]=> string(14) "158.139.30.200" }
[2]=> object(stdClass)#3 (6) { ["id"]=> int(3) ["first_name"]=> string(6) "Joyous" ["last_name"]=> string(8) "Glascott" ["email"]=> string(21) "[email protected]" ["gender"]=> string(6) "Female" ["ip_address"]=> string(14) "146.147.52.106" }
[3]=> object(stdClass)#4 (6) { ["id"]=> int(4) ["first_name"]=> string(7) "Daniela" ["last_name"]=> string(5) "Hawes" ["email"]=> string(25) "[email protected]" ["gender"]=> string(6) "Female" ["ip_address"]=> string(15) "148.153.203.134" }
}

Теперь мы можем получить нужные данные из переменной decodedJson, использую синтаксис для работы с объектами:

echo $decodedJson[0]->first_name . " " . $decodedJson[0]->last_name;
echo "
"; echo $decodedJson[1]->first_name . " " . $decodedJson[1]->last_name; // Результат: // Bertrando Pedrollo // Pier Winkworth

Преобразование JSON в ассоциативный массив

Для того, чтобы результатом преобразования JSON-данных с помощью функции jsin_decode стал ассоциативный массив, а не объект (stdClass), нужно добавить второй параметр $assoc равный true (по умолчанию его значение - false).

Посмотрим на пример:

$json = '[{ "id": 1, "first_name": "Bertrando", "last_name": "Pedrollo", "email": "[email protected]", "gender": "Male", "ip_address": "62.137.20.86" }, { "id": 2, "first_name": "Pier", "last_name": "Winkworth", "email": "[email protected]", "gender": "Female", "ip_address": "158.139.30.200" }, { "id": 3, "first_name": "Joyous", "last_name": "Glascott", "email": "[email protected]", "gender": "Female", "ip_address": "146.147.52.106" }, { "id": 4, "first_name": "Daniela", "last_name": "Hawes", "email": "[email protected]", "gender": "Female", "ip_address": "148.153.203.134" }]';
$decodedJson = json_decode($json, true);
var_dump($decodedJson);

Результат:

array(4) { [0]=> array(6) { ["id"]=> int(1) ["first_name"]=> string(9) "Bertrando" ["last_name"]=> string(8) "Pedrollo" ["email"]=> string(24) "[email protected]" ["gender"]=> string(4) "Male" ["ip_address"]=> string(12) "62.137.20.86" } [1]=> array(6) { ["id"]=> int(2) ["first_name"]=> string(4) "Pier" ["last_name"]=> string(9) "Winkworth" ["email"]=> string(19) "[email protected]" ["gender"]=> string(6) "Female" ["ip_address"]=> string(14) "158.139.30.200" } [2]=> array(6) { ["id"]=> int(3) ["first_name"]=> string(6) "Joyous" ["last_name"]=> string(8) "Glascott" ["email"]=> string(21) "[email protected]" ["gender"]=> string(6) "Female" ["ip_address"]=> string(14) "146.147.52.106" } [3]=> array(6) { ["id"]=> int(4) ["first_name"]=> string(7) "Daniela" ["last_name"]=> string(5) "Hawes" ["email"]=> string(25) "[email protected]" ["gender"]=> string(6) "Female" ["ip_address"]=> string(15) "148.153.203.134" } }

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

echo $decodedJson[0]["first_name"] . " " . $decodedJson[0]["last_name"];
echo "
"; echo $decodedJson[1]["first_name"] . " " . $decodedJson[1]["last_name"]; // Результат: // Bertrando Pedrollo // Pier Winkworth

Заключение

Примеры, разбираемые в данной статье, в очередной раз демонстрируют наличие в PHP великолепных нативных функций и замечательной документации. Не поленитесь изучить дополнительную информацию о json_decode на официальном сайте.


Спасибо за внимание.

    • backend
    • php

Новые публикации

Далее

Категории

О нас

Frontend & Backend. Статьи, обзоры, заметки, код, уроки.