Php json значение по ключу

Извлечение данных из JSON с помощью PHP

Получение доступа к свойствам одного из этих объектов тако е же, как и к публичным нестатическим свойствам любого другого объекта, например, $object->property.

$json = ‘

«type»: «donut»,

«name»: «Cake»

>’;

$yummy = json_decode($json);

echo $yummy->type;

Доступ к элементам массива

Получение доступа к элементам одного из этих массивов тако е же, как и к любому другому массиву, например, $array[0].

$json = ‘[

«Glazed»,

«Chocolate with Sprinkles»,

«Maple»

]’;

$toppings = json_decode($json);

echo $toppings[1];

Итерация с помощью foreach:

foreach ($toppings as $topping)

echo $topping, «\n»;

>

Доступ к вложенным элементам

Свойства объектов и элементы массивов могут иметь вложенные объекты и/или массивы. Обращение к их свойствам и членам происходит как обычно, например, $object->array[0]->etc.

$json = ‘

«type»: «donut»,

«name»: «Cake»,

«toppings»: [

< "id": "5002", "type": "Glazed" >,

< "id": "5006", "type": "Chocolate with Sprinkles" >,

]

>’;

$yummy = json_decode($json);

echo $yummy->toppings[2]->id;

Передача true в качестве второго аргумента в json_decode()

При этом вместо объектов вы получите ассоциативные массивы — массивы со строками для ключей. И снова доступ к их элементам происходит как обычно, например , $array[‘key’] .

$json = ‘

«type»: «donut»,

«name»: «Cake»,

«toppings»: [

< "id": "5002", "type": "Glazed" >,

< "id": "5006", "type": "Chocolate with Sprinkles" >,

]

>’;

$yummy = json_decode($json, true);

echo $yummy[‘toppings’][2][‘type’];

Читайте также:  How does java works

Доступ к элементам ассоциативного массива

При декодировании объекта JSON в ассоциативный массив PHP вы можете перебирать ключи и значения, используя синтаксис:

foreach(array_expression as $key => $value)

Например:

$json = ‘

«foo»: «foo value»,

«bar»: «bar value»,

«baz»: «baz value»

>’;

$assoc = json_decode($json, true);

foreach ($assoc as $key => $value)

echo «Значение ключа ‘$key’ равно ‘$value'», PHP_EOL;

>

Вывод

Значение ключа ‘foo’ равно ‘foo value’
Значение ключа ‘bar’ равно ‘bar value’
Значение ключа ‘baz’ равно ‘baz value’

Если неизвестно, как структурированы данные

Прочтите документацию, откуда вы получаете JSON.

Просмотрите структуру JSON : там, где фигурные скобки <> , предполагается наличие объекта, там, где квадратные скобки [] , — массив.

Вывод декодированных данных с помощью print_r():

$json = ‘

«type»: «donut»,

«name»: «Cake»,

«toppings»: [

< "id": "5002", "type": "Glazed" >,

< "id": "5006", "type": "Chocolate with Sprinkles" >,

]

>’;

$yummy = json_decode($json);

print_r($yummy);

Результат будет таким:

stdClass Object (

[type] => donut [name] => Cake [toppings] => Array ( [0] => stdClass Object ( [id] => 5002 [type] => Glazed

)

[1] => stdClass Object ( [id] => 5006 [type] => Chocolate with Sprinkles

)

[2] => stdClass Object ( [id] => 5004 [type] => Maple

)

)

)

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

Если json_decode() возвращает null

  1. JSON полностью состоит только из этого null .
  2. JSON поврежден – проверьте его, используя json_last_error_msg , или проанализируйте, используя что-то вроде JSONLint.
  3. JSON содержит элементы, вложенные более чем на 512 уровней. Эту максимальную глубину по умолчанию можно изменить, передав целое число в качестве третьего аргумента json_decode().

Имя свойства объекта содержит специальный символ

Иногда имя свойства объекта содержит что-то вроде дефиса или знака @, которые нельзя использовать в идентификаторе. В этом случае надо использовать строковый литерал в фигурных скобках для его адресации.

Читайте также:  Учить питон или нет

$json = ‘>’;

$thing = json_decode($json);

echo $thing->->answer;

Иногда встречаются случаи, когда в JSON находится другой JSON

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

$json = ‘

«type»: «donut»,

«name»: «Cake»,

«toppings»: «[, ]»

>’;

$yummy = json_decode($json);

$toppings = json_decode($yummy->toppings);

echo $toppings[0]->type;

Ответ 2

  • json_decode требует, чтобы строка была действительной, иначе функция вернется NULL .
  • В случае сбоя декодирования функция json_last_error() может использоваться для описания ошибки.
  • Убедитесь, что вы передаете контент в кодировке utf8 , иначе в json_decode может произойти ошибка и результат будет NULL .

Мы будем очень благодарны

если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.

Источник

Работа с JSON в PHP

JSON (JavaScript Object Notation) – текстовый формат обмена данными, основанный на JavaScript, который представляет собой набор пар . Значение может быть массивом, числом, строкой и булевым значением.

В PHP поддержка JSON появилась с версии 5.2.0 и работает только с кодировкой UTF-8.

Кодирование

json_encode($value, $options) – кодирует массив или объект в JSON.

$array = array( '1' => 'Значение 1', '2' => 'Значение 2', '3' => 'Значение 3', '4' => 'Значение 4', '5' => 'Значение 5' ); $json = json_encode($array); echo $json;

Как видно кириллица кодируется, исправляется это добавлением опции JSON_UNESCAPED_UNICODE .

$json = json_encode($array, JSON_UNESCAPED_UNICODE); echo $json;

Далее такую строку можно сохранить в файл, или отдать в браузер, например при AJAX запросах.

header('Content-Type: application/json'); echo $json; exit();

Декодирование

Функция json_decode($json) преобразует строку в объект:

$json = ''; $array = json_decode($json); print_r($array);
stdClass Object ( [1] => Значение 1 [2] => Значение 2 [3] => Значение 3 [4] => Значение 4 [5] => Значение 5 )

Если добавить вторым аргументом true , то произойдёт преобразование в массив:

$json = ''; $array = json_decode($json, true); print_r($array);
Array ( [1] => Значение 1 [2] => Значение 2 [3] => Значение 3 [4] => Значение 4 [5] => Значение 5 )

Получение ошибок и их исправление

json_decode() возвращает NULL , если в объекте есть ошибки, посмотреть их можно с помощью функции json_last_error() :

$json = ''; $array = json_decode($json, true); switch (json_last_error())

Посмотреть значения констант JSON:

$constants = get_defined_constants(true); foreach ($constants['json'] as $name => $value) < echo $name . ': ' . $value . '
'; >
JSON_HEX_TAG: 1 JSON_HEX_AMP: 2 JSON_HEX_APOS: 4 JSON_HEX_QUOT: 8 JSON_FORCE_OBJECT: 16 JSON_NUMERIC_CHECK: 32 JSON_UNESCAPED_SLASHES: 64 JSON_PRETTY_PRINT: 128 JSON_UNESCAPED_UNICODE: 256 JSON_PARTIAL_OUTPUT_ON_ERROR: 512 JSON_PRESERVE_ZERO_FRACTION: 1024 JSON_UNESCAPED_LINE_TERMINATORS: 2048 JSON_OBJECT_AS_ARRAY: 1 JSON_BIGINT_AS_STRING: 2 JSON_ERROR_NONE: 0 JSON_ERROR_DEPTH: 1 JSON_ERROR_STATE_MISMATCH: 2 JSON_ERROR_CTRL_CHAR: 3 JSON_ERROR_SYNTAX: 4 JSON_ERROR_UTF8: 5 JSON_ERROR_RECURSION: 6 JSON_ERROR_INF_OR_NAN: 7 JSON_ERROR_UNSUPPORTED_TYPE: 8 JSON_ERROR_INVALID_PROPERTY_NAME: 9 JSON_ERROR_UTF16: 10

Если вы хотите распарсить JS объект из HTML страницы или файла, то скорее всего json_decode вернет ошибку т.к. в коде будут управляющие символы или BOM. Удалить их можно следующим образом:

$json = ''; // Удаление управляющих символов for ($i = 0; $i // Удаление символа Delete $json = str_replace(chr(127), '', $json); // Удаление BOM if (0 === strpos(bin2hex($json), 'efbbbf')) < $json = substr($json, 3); >$res = json_decode($json, true); print_r($res);

HTTP-запросы в формате JSON

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

$data = array( 'name' => 'snipp.ru' 'text' => 'Отправка сообщения', ); $ch = curl_init('https://example.com'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); $res = curl_exec($ch); curl_close($ch);

А также могут обратится к вашим скриптам в таком формате, чтение JSON запроса.

$data = file_get_contents('php://input'); $data = json_decode($data, true);

Источник

Оцените статью