dr.Brain

doctor Brain

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

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

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

dr.Brain

время чтения 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": "bpedrollo0@homestead.com",
  "gender": "Male",
  "ip_address": "62.137.20.86"
}, {
  "id": 2,
  "first_name": "Pier",
  "last_name": "Winkworth",
  "email": "pwinkworth1@mit.edu",
  "gender": "Female",
  "ip_address": "158.139.30.200"
}, {
  "id": 3,
  "first_name": "Joyous",
  "last_name": "Glascott",
  "email": "jglascott2@smh.com.au",
  "gender": "Female",
  "ip_address": "146.147.52.106"
}, {
  "id": 4,
  "first_name": "Daniela",
  "last_name": "Hawes",
  "email": "dhawes3@timesonline.co.uk",
  "gender": "Female",
  "ip_address": "148.153.203.134"
}]

json_decode

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

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

$json = '[{ "id": 1, "first_name": "Bertrando", "last_name": "Pedrollo", "email": "bpedrollo0@homestead.com", "gender": "Male", "ip_address": "62.137.20.86" }, { "id": 2, "first_name": "Pier", "last_name": "Winkworth", "email": "pwinkworth1@mit.edu", "gender": "Female", "ip_address": "158.139.30.200" }, { "id": 3, "first_name": "Joyous", "last_name": "Glascott", "email": "jglascott2@smh.com.au", "gender": "Female", "ip_address": "146.147.52.106" }, { "id": 4, "first_name": "Daniela", "last_name": "Hawes", "email": "dhawes3@timesonline.co.uk", "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) "bpedrollo0@homestead.com" ["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) "pwinkworth1@mit.edu" ["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) "jglascott2@smh.com.au" ["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) "dhawes3@timesonline.co.uk" ["gender"]=> string(6) "Female" ["ip_address"]=> string(15) "148.153.203.134" } 
}

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

echo $decodedJson[0]->first_name . " " . $decodedJson[0]->last_name;
echo "<br />";
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": "bpedrollo0@homestead.com", "gender": "Male", "ip_address": "62.137.20.86" }, { "id": 2, "first_name": "Pier", "last_name": "Winkworth", "email": "pwinkworth1@mit.edu", "gender": "Female", "ip_address": "158.139.30.200" }, { "id": 3, "first_name": "Joyous", "last_name": "Glascott", "email": "jglascott2@smh.com.au", "gender": "Female", "ip_address": "146.147.52.106" }, { "id": 4, "first_name": "Daniela", "last_name": "Hawes", "email": "dhawes3@timesonline.co.uk", "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) "bpedrollo0@homestead.com" ["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) "pwinkworth1@mit.edu" ["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) "jglascott2@smh.com.au" ["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) "dhawes3@timesonline.co.uk" ["gender"]=> string(6) "Female" ["ip_address"]=> string(15) "148.153.203.134" } }

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

echo $decodedJson[0]["first_name"] . " " . $decodedJson[0]["last_name"]; 
echo "<br />";
echo $decodedJson[1]["first_name"] . " " . $decodedJson[1]["last_name"];


// Результат:
// Bertrando Pedrollo
// Pier Winkworth

Заключение

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


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

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

Далее

Категории

О нас

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