Анализ данных JSON с помощью PHP

Я разбирал данные JSON много раз, но по какой-то причине не могу найти правильный синтаксис для использования, когда данные вложены. Я пытаюсь проанализировать «активы» из этого JSON, но продолжать получать недопустимый аргумент, предоставленный foreach (), независимо от того, что я пытаюсь сделать.

"3435":{ "name":"COLO-1014-SJ1", "nickname":"US-SJC-004", "type":"Colocated Server", "location":"San Jose:55 S Market", "assets":{ "CPU":[ { "model":"Intel E3 1270" } ], "Hard Drives":[ { "model":"Western Digital 500GB RE4 ABYX SATA" }, { "model":"Western Digital 500GB RE4 ABYX SATA" }, { "model":"Kingston 240GB SSD" } ], "RAM":[ { "model":"Super Talent 4GB DDR3 1333 ECC" }, { "model":"Super Talent 4GB DDR3 1333 ECC" }, { "model":"Super Talent 4GB DDR3 1333 ECC" }, { "model":"Super Talent 4GB DDR3 1333 ECC" } ], 

Я бы ожидал, что это будет что-то вроде …

 $json = json_decode($jsondata, true); foreach ($json as $item) { foreach ($item['assets']->RAM as $asset) { echo $asset->model; } 

Related of "Анализ данных JSON с помощью PHP"

Из официальной документации php: http://php.net/manual/fr/function.json-decode.php

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

Но вы фактически смешиваете массив и объект в своем цикле.

Если вы держите arg в TRUE , используйте $item['assets']['RAM']

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

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

 { "3435": { "name": "COLO-1014-SJ1", "nickname": "US-SJC-004", "type": "Colocated Server", "location": "San Jose:55 S Market", "assets": { "CPU": [ { "model": "Intel E3 1270" } ], "Hard Drives": [ { "model": "Western Digital 500GB RE4 ABYX SATA" }, { "model": "Western Digital 500GB RE4 ABYX SATA" }, { "model": "Kingston 240GB SSD" } ], "RAM": [ { "model": "Super Talent 4GB DDR3 1333 ECC" }, { "model": "Super Talent 4GB DDR3 1333 ECC" }, { "model": "Super Talent 4GB DDR3 1333 ECC" }, { "model": "Super Talent 4GB DDR3 1333 ECC" } ] } } } 

Если вам когда-либо понадобится проверить код JSON, вы можете использовать валидатор, например http://jsonlint.com/

Во-вторых, ваш PHP-код также неверен:

 $json = json_decode($jsondata, true); foreach ($json as $item) { foreach ($item->assets->RAM as $asset) { echo $asset->model; } } 

Вы пытаетесь получить доступ к возвращенному объекту в виде массива, который также вызовет проблемы с циклом foreach.

$item->assets , а не $item['assets'] . Сделайте print_r($json) чтобы вы могли видеть типы различных частей JSON – это упростит их доступ к ним.

Он анализируется как объект, поэтому:

 foreach ($item -> assets -> RAM as $asset){ ... }