如何在 php 中读取具有多个级别的 json 的值?

How can I read values of json with multiple level in php?

我有以下代码来读取 Json 并将一些值存储到数组中:

<?php
$json = '[{
        "provider_id":1,
        "nro_chart":1,
        "control": {
            "color": "blue",
            "total_value": 21.5,
            "car_id": 421118
        }
    },
    {
        "control": {
            "color": "green",
            "total_value": 25,
            "car_id": 421119
        }
    },
    {
        "control": {
            "color": "red",
            "total_value": 18,
            "car_id": 421519
        }
    }
]';

$j = json_decode($data);
$result = [];
foreach ($j as $item) {
    array_push($result,[
        'total_value' => $item->control->total_value,
        'car_id' => $item->control->car_id
    ]);
}

现在我需要在变量中获取 "control" 之外的两个值,例如 "provider_id" 和 "nro_chart"。

JSON包含一个元素的数组,因此要访问provider_idnro_chart,获取第一个元素并直接访问属性:

$j = json_decode($json);
var_dump($j[0]->provider_id); // /Applications/MAMP/htdocs/trello/up.php:28:int 1
var_dump($j[0]->nro_chart); // /Applications/MAMP/htdocs/trello/up.php:28:int 1

Demo

或者,在同一个 foreach 循环中:

foreach ($j as $item) {
    array_push($result,[
        'total_value' => $item->control->total_value,
        'car_id' => $item->control->car_id
    ]);
    if (isset($item->provider_id)) {
        var_dump($item->provider_id);
    }
    if (isset($item->nro_chart)) {
        var_dump($item->nro_chart);
    }
}

请务必先检查是否为带有 isset() 的元素设置了 属性。

json_decode($json, true);

会将您的 json 字符串转换为关联数组。 所以现在你可以使用:$item['provider_id'].

这里有一个方法可以修改数组并用较少的迭代函数声明两个额外的变量。

代码:(Demo)

$array = json_decode($json,true);  // decode as array because that is what you are generating in the result

$provider_id=$array[0]['provider_id'];
$nro_chart=$array[0]['nro_chart'];

foreach($array as $index=>&$subarray){  // modify $subarray by reference
    $subarray=['total_value'=>$subarray['control']['total_value'],'car_id'=>$subarray['control']['car_id']];  // overwrite each subarray using the first two elements from deeper "control" subarray
}

echo "provider_id = $provider_id\n";  // display integer value
echo "nro_chart = $nro_chart\n";      // display integer value
var_export($array);                   // display updated array

输出:

provider_id = 1
nro_chart = 1
array (
  0 => 
  array (
    'total_value' => 21.5,
    'car_id' => 421118,
  ),
  1 => 
  array (
    'total_value' => 25,
    'car_id' => 421119,
  ),
  2 => 
  array (
    'total_value' => 18,
    'car_id' => 421519,
  ),
)