我正在尝试从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输出似乎都与我的输出不同。
我希望有人能在正确的方向上帮助我。
答案 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'] ;
}