Foreach json输出并存储在变量中

时间:2019-07-18 18:48:30

标签: php json

我正在尝试从json代码中获取结果。 我已经在jsonlint上检查了json结果,并通过了验证。

我这样做:

$result = curl_exec($curl);
if(!$result){die("Connection Failure");}
curl_close($curl);

然后当我回显$ result时,结果如下:

  

{“ vat”:{“ 640252”:{“ name”:“ 0%”,“ percentage”:“ 0.00”,“ invoice_type”:“ 2”,“ vat_code”:“ 5B2”,“ available” :“ 1”},“ 640258”:{“名称”:“ 0%”,“百分比”:“ 0.00”,“发票类型”:“ 1”,“ vat_code”:“ 1E1”,“可用”:“ 1 “},” 640256“:{” name“:” 21%“,” percentage“:” 21.00“,” invoice_type“:” 1“,” vat_code“:” 1A2“,” available“:” 1“}} }

当我这样做时,它的确会显示增值税代码640252的名称:

$result2 = json_decode($result, true);
echo $result2['vat']['640252']['name'];

但是我无法通过foreach遍历json。首先,要创建一个具有id(例如640252)的变量和一个具有百分比的变量,然后在foreach中回显它们。

我已经尝试了Stackoverflow的很多方法,但是所有json输出似乎都与我的输出不同。

我希望有人能在正确的方向上帮助我。

3 个答案:

答案 0 :(得分:0)

原因是,vat是对json字符串进行解码后具有值数组的键。只需像下面的示例中那样迭代vat属性。

$data = json_decode($result, true);

foreach ($data['vat'] as $id => $item) {
    echo "<pre>";
    var_dump($id, $item);
    echo "</pre>";
}

希望有帮助。

答案 1 :(得分:0)

<?php
$json = '... lots of JSON here ...';

$arr = json_decode($json, true);

foreach ($arr['vat'] as $id => $item) {
    echo "$id -> {$item['name']}\n";
}

以您的JSON为例,这是我得到的输出:

640252 -> 0%
640258 -> 0%
640256 -> 21%

如果您不需要ID(例如640252),则可以执行以下操作:

foreach ($arr['vat'] as $item) {

答案 2 :(得分:0)

首先,我建议您将json格式设置为可读。我个人使用https://jsonlint.com/来验证我的json数据。

如果这样做,我们可以看到vat是一个json对象,它具有640252、640258等作为直接子对象。

第二个参数为true的解码将解码为关联数组。循环增值税属性将是:

foreach($result2['vat'] as $id => $val) {
    echo 'Id is:'. $id;
    echo 'name is '. $val['name'] ;
    echo 'percentage is '. $val['percentage'] ;
}