- Извлечение данных из JSON с помощью PHP
- Доступ к элементам массива
- Доступ к вложенным элементам
- Передача true в качестве второго аргумента в json_decode()
- Доступ к элементам ассоциативного массива
- Если неизвестно, как структурированы данные
- Если json_decode() возвращает null
- Имя свойства объекта содержит специальный символ
- Иногда встречаются случаи, когда в JSON находится другой JSON
- Ответ 2
- Руководство по обработке JSON в PHP
- Парсинг JSON с помощью PHP
- Кодирование данных JSON в PHP
- Декодирование данных JSON в PHP
- Извлечение значений из вложенных JSON-данных в PHP
Извлечение данных из 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’];
Доступ к элементам ассоциативного массива
При декодировании объекта 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
- JSON полностью состоит только из этого null .
- JSON поврежден – проверьте его, используя json_last_error_msg , или проанализируйте, используя что-то вроде JSONLint.
- 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. JSON — это стандартный легкий формат обмена данными, который просто и быстро анализировать и генерировать.
JSON, как и XML, представляет собой текстовый формат, который легко писать и легко читать как людям, так и для компьютерам, но в отличие от XML, структуры JSON-данных имеют меньшую пропускную способность, чем их версии XML. JSON основан на двух основных структурах:
- Object: определяется как набор пар ключ/значение ( key:value ). Каждый объект начинается с левой фигурной скобки < и заканчивается правой фигурной скобкой >. Несколько пар ключ/значение разделяются запятой , .
- Array: это упорядоченный список значений. Массив начинается с левой скобки [ и заканчивается правой скобкой ] . Значения разделяются запятой , .
В JSON ключи всегда являются строками, а значение может быть string , number , true или false , null и даже object или array . Строки должны быть заключены в двойные кавычки » и могут содержать escape-символы, такие как \n , \t и \ . Объект JSON может выглядеть следующим образом:
В то время как пример JSON-массива будет выглядеть примерно так:
Формат обмена данными — это текстовый формат, который используется для обмена данными между различными платформами и операционными системами. JSON — самый популярный и легкий формат обмена данными для веб-приложений.
Парсинг JSON с помощью PHP
Структуры JSON-данных очень похожи на массивы PHP. PHP имеет встроенные функции для кодирования и декодирования данных JSON. Это функции json_encode() и json_decode() соответственно. Обе функции работают только со строковыми данными в кодировке UTF-8.
Кодирование данных JSON в PHP
В PHP функция json_encode() используется для кодирования значения в JSON-формат. Кодируемое значение может быть любым типом данных PHP, кроме ресурса, такого как база данных или дескриптор файла. В приведенном ниже примере показано, как кодировать ассоциативный массив PHP в объект JSON:
65, "Harry"=>80, "John"=>78, "Clark"=>90); echo json_encode($marks); /* Выводит: */ ?>
Точно так же вы можете закодировать индексированный массив PHP в массив JSON, например:
Вы также можете заставить функцию json_encode() возвращать индексированный массив PHP как объект JSON, используя параметр JSON_FORCE_OBJECT , как показано в примере ниже:
Как вы можете видеть в приведенных выше примерах, неассоциативный массив может быть закодирован как массив или объект. Однако ассоциативный массив всегда кодируется как объект.
Декодирование данных JSON в PHP
Расшифровать или декодировать JSON-данные так же просто, как и закодировать. Вы можете использовать PHP-функцию json_decode() для преобразования закодированной JSON-строки в соответствующий тип данных PHP. В следующем примере показано, как декодировать или преобразовать объект JSON в объект PHP.
'; var_dump(json_decode($json)); /* Выводит: object(stdClass)#1 (4) < ["Peter"]=> int(65) ["Harry"]=> int(80) ["John"]=> int(78) ["Clark"]=> int(90) >*/ ?>
По умолчанию функция json_decode() возвращает объект. Однако вы можете дополнительно указать второй параметр $assoc , который принимает логическое значение, которое при установке в качестве true для JSON-объекта декодируется в ассоциативные массивы. По умолчанию — false . Вот пример:
'; var_dump(json_decode($json, true)); /* Выводит: array(4) < ["Peter"]=> int(65) ["Harry"]=> int(80) ["John"]=> int(78) ["Clark"]=> int(90) >*/ ?>
Теперь давайте рассмотрим пример, который покажет вам, как декодировать JSON-данные и получить доступ к отдельным элементам объекта или массива JSON в PHP.
'; // Декодируем JSON-данные в ассоциативный массив PHP $arr = json_decode($json, true); // Доступ к значениям из ассоциативного массива echo $arr["Peter"]; // Выводит: 65 echo $arr["Harry"]; // Выводит: 80 echo $arr["John"]; // Выводит: 78 echo $arr["Clark"]; // Выводит: 90 // Декодируем JSON-данные в объект PHP $obj = json_decode($json); // Доступ к значениям из объекта echo $obj->Peter; // Выводит: 65 echo $obj->Harry; // Выводит: 80 echo $obj->John; // Выводит: 78 echo $obj->Clark; // Выводит: 90 ?>
Вы также можете просмотреть декодированные данные с помощью цикла foreach() , например:
'; // Декодируем JSON-данные в ассоциативный массив PHP $arr = json_decode($json, true); // Цикл ассоциативного массива foreach($arr as $key=>$value)< echo $key . "=>" . $value . "
"; > echo "
"; // Декодируем JSON-данные в объект PHP $obj = json_decode($json); // Цикл объекта foreach($obj as $key=>$value)< echo $key . "=>" . $value . "
"; > ?>
Извлечение значений из вложенных JSON-данных в PHP
Объекты и массивы JSON также могут быть вложенными. Объект JSON может произвольно содержать другие объекты JSON, массивы, вложенные массивы, массивы объектов JSON и т. д. В следующем примере показано, как декодировать вложенный объект JSON и распечатать все его значения в PHP.
/* Запускаем основной цикл Если значение само по себе является массивом, рекурсивно вызываем эту же функцию Добавляем все найденные значения в массив элементов вывода и увеличиваем счетчик на 1 для каждого найденного значения */ foreach($arr as $key=>$value) < if(is_array($value))< printValues($value); >else < $values[] = $value; $count++; >> // Возвращаем общее количество и значения, найденные в массиве return array('total' => $count, 'values' => $values); > // Назначаем закодированную JSON-строку переменной PHP $json = ' < "book": < "name": "Harry Potter and the Goblet of Fire", "author": "J. K. Rowling", "year": 2000, "characters": ["Harry Potter", "Hermione Granger", "Ron Weasley"], "genre": "Fantasy Fiction", "price": < "paperback": "$10.40", "hardcover": "$20.32", "kindle": "4.11" >> >'; // Декодируем JSON-данные в формат ассоциативного массива PHP $arr = json_decode($json, true); // Вызываем функцию и печатаем все значения $result = printValues($arr); echo "" . $result["total"] . " value(s) found:
"; echo implode("
", $result["values"]); echo "
"; // Выводим одно значение echo $arr["book"]["author"] . "
"; // Выводит: J. K. Rowling echo $arr["book"]["characters"][0] . "
"; // Выводит: Harry Potter echo $arr["book"]["price"]["hardcover"]; // Выводит: $20.32 ?>
Насколько публикация полезна?
Нажмите на звезду, чтобы оценить!