Php прочитать json из файла

Обновлено: 04.07.2024

У меня есть JSON:

Как мне декодировать это в PHP и получить доступ к полученным данным?

Решение

вступление

Там вы можете найти:

  • скаляры: строки , Интс , поплавки , а также Bools (особый тип своего собственного)
  • составные типы: объекты а также массивы .

Это те вещи, которые могут быть закодированы в JSON. Точнее, это версии PHP вещей, которые можно кодировать в JSON.

Объекты будут экземплярами StdClass , встроенный класс, который просто универсальная вещь это не важно здесь.

Доступ к свойствам объекта

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

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

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

Переберите его с foreach .

глазированный
Шоколад с окропляет
кленовый

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

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

Не знаю, как структурированы данные

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

Хит декодированные данные с print_r() :

и проверьте вывод:

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

Разбейте проблему на части, которые легче обернуть вокруг.

json_decode() возвращается null

Это происходит потому, что либо:

Если вам нужно изменить максимальную глубину, вы, вероятно, решаете не ту проблему. Узнайте, почему вы получаете такие глубоко вложенные данные (например, запрашиваемая служба, которая генерирует JSON, имеет ошибку) и убедитесь, что этого не происходит.

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

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

Кто-то положил JSON в ваш JSON

Данные не помещаются в памяти

Как это отсортировать

Другие решения

Ты можешь использовать json_decode () преобразовать строку json в объект / массив PHP.

Выход:

Несколько моментов для запоминания:

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

Я написал пакет с именем JSON (GitHub , Packagist ). Если вы хотите предотвратить накладные расходы на использование json_* функции, вы должны попробовать это.

пример

Увидеть вики , или же краткое руководство познакомиться с этим.

Кроме того, если вы хотите прочитать файлы JSON и извлечь их данные (как вам кажется, вы пытаетесь это сделать), см. JSONFile пакет, о котором я тоже написал.

JSON, как и XML, представляет собой текстовый формат, который легко писать и легко читать как людям, так и для компьютерам, но в отличие от XML, структуры JSON-данных имеют меньшую пропускную способность, чем их версии XML. JSON основан на двух основных структурах:

  • Object: определяется как набор пар ключ/значение ( key:value ). Каждый объект начинается с левой фигурной скобки < и заканчивается правой фигурной скобкой >. Несколько пар ключ/значение разделяются запятой , .
  • Array: это упорядоченный список значений. Массив начинается с левой скобки [ и заканчивается правой скобкой ] . Значения разделяются запятой , .

В JSON ключи всегда являются строками, а значение может быть string , number , true или false , null и даже object или array . Строки должны быть заключены в двойные кавычки " и могут содержать escape-символы, такие как \n , \t и \ . Объект JSON может выглядеть следующим образом:

В то время как пример JSON-массива будет выглядеть примерно так:

Парсинг JSON с помощью PHP

Структуры JSON-данных очень похожи на массивы PHP. PHP имеет встроенные функции для кодирования и декодирования данных JSON. Это функции json_encode() и json_decode() соответственно. Обе функции работают только со строковыми данными в кодировке UTF-8.

Кодирование данных JSON в PHP

В PHP функция json_encode() используется для кодирования значения в JSON-формат. Кодируемое значение может быть любым типом данных PHP, кроме ресурса, такого как база данных или дескриптор файла. В приведенном ниже примере показано, как кодировать ассоциативный массив PHP в объект JSON:

Точно так же вы можете закодировать индексированный массив PHP в массив JSON, например:

Вы также можете заставить функцию json_encode() возвращать индексированный массив PHP как объект JSON, используя параметр JSON_FORCE_OBJECT , как показано в примере ниже:

Как вы можете видеть в приведенных выше примерах, неассоциативный массив может быть закодирован как массив или объект. Однако ассоциативный массив всегда кодируется как объект.

Декодирование данных JSON в PHP

Расшифровать или декодировать JSON-данные так же просто, как и закодировать. Вы можете использовать PHP-функцию json_decode() для преобразования закодированной JSON-строки в соответствующий тип данных PHP. В следующем примере показано, как декодировать или преобразовать объект JSON в объект PHP.

Теперь давайте рассмотрим пример, который покажет вам, как декодировать JSON-данные и получить доступ к отдельным элементам объекта или массива JSON в PHP.

Вы также можете просмотреть декодированные данные с помощью цикла foreach() , например:

Извлечение значений из вложенных JSON-данных в PHP

Объекты и массивы JSON также могут быть вложенными. Объект JSON может произвольно содержать другие объекты JSON, массивы, вложенные массивы, массивы объектов JSON и т. д. В следующем примере показано, как декодировать вложенный объект JSON и распечатать все его значения в PHP.

Похожие посты

Руководство по загрузке файлов на сервер в PHP

Руководство по GET и POST запросам в PHP

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 5 / 5. Количество оценок: 1

Оценок пока нет. Поставьте оценку первым.

Разработка сайтов для бизнеса

Если у вас есть вопрос, на который вы не знаете ответ — напишите нам, мы поможем разобраться. Мы всегда рады интересным знакомствам и новым проектам.

Получение доступа к свойствам одного из этих объектов тако е же, как и к публичным нестатическим свойствам любого другого объекта, например, $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

  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?" вопросов. Здесь мы рассмотрим широкие основы декодирования JSON в PHP и доступа к результатам.

У меня есть JSON:

Как мне декодировать это в PHP и получить доступ к результирующим данным?

ОТВЕТЫ

Ответ 1

Введение

Во-первых, у вас есть строка. JSON не является массивом, объектом или структурой данных. JSON - это текстовый формат сериализации - необычная строка, но все же просто строка. Расшифруйте его в PHP с помощью json_decode() .

Здесь вы можете найти:

  • скаляры: строки, целые, плавающие и bools (собственный особый тип)
  • составные типы: объекты и массивы.

Это те вещи, которые могут быть закодированы в JSON. Точнее, это версии PHP вещей, которые можно кодировать в JSON.

В них нет ничего особенного. Они не являются "объектами JSON" или "массивами JSON". Вы расшифровали JSON - теперь у вас есть основные повседневные типы PHP.

Объекты будут экземплярами stdClass, встроенного класса, который является просто универсальной вещью, которая здесь не важна.

Доступ к свойствам объекта

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

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

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

Переберите его с помощью foreach .

Застекленный
Шоколад с окроплением
Maple

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

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

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

Когда вы сделаете это, вместо объектов вы получите ассоциативные массивы - массивы со строками для ключей. Снова вы получаете доступ к его элементам, как обычно, например, $array['key'] .

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

При декодировании объекта JSON в ассоциативный PHP-массив вы можете перебирать и ключи, и значения, используя синтаксис foreach (array_expression as $key => $value) , например

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

Не знаю, как структурированы данные

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

Посмотрите на JSON - где вы видите фигурные скобки <> ожидают объект, а вы видите квадратные скобки [] ожидают массив.

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

и проверьте вывод:

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

Если вы можете зайти так далеко до того, как заблудитесь, зайдите так далеко и нажмите на него print_r() :

Разбейте проблему на части, которые легче обернуть вокруг себя.

json_decode() возвращает null

Это происходит потому, что:

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

Если вам нужно изменить максимальную глубину, вы, вероятно, решаете не ту проблему. Узнайте, почему вы получаете такие глубоко вложенные данные (например, у службы, к которой вы обращаетесь, при создании JSON есть ошибка), и убедитесь, что этого не происходит.

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

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

Если у вас есть целое число как свойство, см.: Как получить доступ к свойствам объекта с именами, такими как целые числа? в качестве ссылки.

Кто-то вставил JSON в ваш JSON

Это смешно, но это случается - JSON закодирован как строка в вашем JSON. Расшифруйте, получите доступ к строке как обычно, расшифруйте ее и в итоге получите то, что вам нужно.

Данные не помещаются в памяти

Если ваш JSON слишком велик для одновременной обработки json_decode() , все становится сложнее. См:

Как это отсортировать

Ответ 2

Вы можете использовать json_decode() для преобразования строки json в объект/массив PHP.

Вывод:

Несколько пунктов для запоминания:

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

Ответ 3

Функция PHP json_decode принимает строку JSON и преобразует ее в переменную PHP. Как правило, данные JSON будут представлять массив JavaScript или литерал объекта, который json_decode преобразует в массив или объект PHP. Следующие два примера демонстрируют:

Ответ 4

Вы можете использовать пакет JSON (GitHub, Packagist). Вы можете легко установить его с помощью Composer.

пример

Посмотрите вики или краткое руководство, чтобы ознакомиться с ним.

Кроме того, если вы хотите прочитать файлы JSON и извлечь их данные (как вы, кажется, пытаетесь это сделать), см. Пакет JSONFile.

Ответ 5

Это не официальная функция.

Вторичная библиотека, которая предлагает интересные функции, такие как json_decode, json_encode:

JPOPHP (JSON Parser Object PHP) - это библиотека для анализа данных в формате JSON.

Ответ 6

Мы можем декодировать строку json в массив, используя функцию json_decode в php

1) json_decode ($ json_string)//возвращает объект

2) json_decode ($ json_string, true)//возвращает массив

Ответ 7

Я написал пакет с именем JSON (GitHub, Packagist). Если вы хотите избежать накладных расходов на использование функций json_* , попробуйте это.

пример

Посмотрите вики или краткое руководство, чтобы ознакомиться с ним.

Более того, если вы хотите прочитать файлы JSON и извлечь их данные (как вы, кажется, пытаетесь это сделать), посмотрите пакет JSONFile, который я тоже написал.

Ответ 8

Проверьте приведенный ниже код для преобразования json в массив в PHP Если JSON верен, то json_decode() работает хорошо и вернет массив, но если JSON искажен, то он вернет NULL ,

Если JSON искажен, и вы ожидаете только массив, вы можете использовать эту функцию,

Если JSON искажен, и вы хотите остановить выполнение кода, то вы можете использовать эту функцию,

Читайте также: