Получить имя свойства JSON, за которым следуют значения имени элемента, используя PHP - PullRequest
1 голос
/ 20 апреля 2019

Я пытаюсь проанализировать JSON с помощью PHP, затем распечатать имя родительского свойства, а затем элементы.

Вот JSON

{
"Specials": [{
    "name": "Shirt","dsc":"cotton shirt",
    "vari": [{ "name":"red", "price":25.80 },{ "name":"green", "price":26.50 }]
}, 

{
    "name":"shorts","dsc":"one size","price":15.99
},

{
    "name":"shoes","dsc":"black shoes",
    "vari": [{ "name":"capri", "price":37.80 },{ "name":"shooters", "price":28.50 }]
}],

"Jumpers": [{
    "name": "Glax Red","dsc":"thin lightweight","price":22.99
}, 

{
    "name": "Bazoo Care","dsc":"ideal for winter","price":32.99
}]
}

Я использовал следующее для его повторения:

$readjson = file_get_contents('products.json') ;

$data = json_decode($readjson);

foreach ($data as $products) {
foreach ($products as $product) {

echo $product->name."<br>".$product->dsc."<br>";
if (isset($product->price))
    {
echo " ".$product->price."<br>";
}
else {
foreach ($product->vari as $var) {
echo $var->name." ".$var->price."<br/>";
}
}

Вывод:

футболка хлопковая рубашка красный 25,8 зеленый 26,5 шорты один размер 15,99 ...

Я хотел бы сначала напечатать название свойства, а затем показать элементы, которые в нем находятся, оно должно выглядеть так:

Скидка

рубашка хлопковая рубашка красный 25,8 зеленый 26,5

шорты один размер 15,99 ...

Перемычки

Glax Red тонкий легкий 22,99

Bazoo Care идеально подходит для зимы 32,99

Я добавил это как внешний вложенный цикл:

foreach ($data as $products => $value) {
echo $products;}

Но это возвращает только первое имя объекта. Как я могу достичь вышеуказанного?

Вот визуализация JSON.

enter image description here

Ответы [ 2 ]

0 голосов
/ 20 апреля 2019

Вы почти на месте, вам просто нужно вывести имя ключа в первом цикле, поэтому

foreach ($data as $products) {

- это бит, который проходит по элементам Specials и т. Д. Итак, сначала захватите ключ вforeach() и просто выведите это как первое, что есть в цикле ...

foreach ($data as $key => $products) {
    echo $key."<br>";

(Нет }) даст ...

Specials<br>Shirt<br>cot...
0 голосов
/ 20 апреля 2019

Преобразование вас json в массив и цикл по нему

 $data = json_decode($readjson, true);

Здесь мы передаем параметр true, который означает массив без объекта.

foreach($data as $key => $value){
  foreach($value as $k => $v){
     echo '<b>'.$v['name'].'</b> '.' '.$v['dsc'];
     echo isset($v['price']) ? $v['price'] : ' ';
     if(array_key_exists('vari', $v)){
        $vari = array_column($v['vari'], 'price','name');
        foreach($vari as $_k => $_v){
            echo $_k.' '.$_v;
        }
     }
     echo '<hr>';
  }
}

Результат: -

Shirt cotton shirt red 25.8green 26.5
shorts one size15.99
shoes black shoes capri 37.8shooters 28.5
Glax Red thin lightweight22.99
Bazoo Care ideal for winter32.99
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...