Получение данных JSON с помощью PHP

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

У меня есть файл JSON, который имеет такие данные:

{ "store":"Store 1", "cat":"Categories", "general_cat":"Categories", "spec_cat":"Accessories" }, { "store":"Store 1", "cat":"Categories", "general_cat":"Categories", "spec_cat":"Accessories" }, 

в нем около 50 записей. Я пытаюсь разобрать эти данные и сохранить значения в переменных.

До сих пор я пробовал:

 $string = file_get_contents("jsonFile.json"); $json_array = json_decode($string,true); foreach ($json_array as $key => $value){ $store = $key -> store; $general_cat = $key -> general_cat; $spec_cat = $key -> spec_cat; if (!is_null($key -> mainImg_select)){ $cat = $key -> cat; } echo $headURL; } 

Это приводит к ошибкам «Попытка получить свойство не объектов». Что я здесь делаю неправильно?

Второй аргумент json_decode сообщает функции, следует ли возвращать данные как объект или массив.

Доступ к объекту использует символ -> . Чтобы вернуть объект из json_decode используйте json_decode($jsonString) или json_decode($jsonString, false) (второй аргумент по умолчанию равен false )

 $jsonString = '{ "this_is_json" : "hello!" }'; $obj = json_decode($jsonString); echo $obj->this_is_json // "hello!"; 

Вы также можете получить доступ к своим данным json как к массиву, установив второй аргумент в true

 $jsonString = '{ "this_is_json" : "hello!" }'; $arr = json_decode($jsonString, true); echo $arr['this_is_json'] // "hello!"; 

Что может быть немного более концептуально запутанным, так это то, что PHP json_decode может возвращать либо массив объектов (а не только объект), либо ассоциативный массив.

Рассмотрим следующую строку json. Эта строка представляет собой «коллекцию» (квадратные скобки) структур данных json (фигурные скобки).

 [ { "name": "One" }, { "name": "Two" } ] 

Если мы присвоим этот json переменной $string мы надеемся, это иллюстрирует разницу

 $asObjects = json_decode($string); $asAssociativeArray = json_decode($string, true); foreach ($asObjects as $obj) { echo $obj->name; } foreach ($asAssociativeArray as $arr) { echo $arr['name']; } 

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

Попробуйте $json_array = json_decode($string,false); , Это вернет объекты

Кроме того, как упоминает @MatRt, вам нужно использовать $ value вместо $ key для ссылки на объекты

Вам нужно получить значения с помощью синтаксиса массива:

 $item['key'] 

как это предусмотрено

 $item->key