【问题标题】:Extracting data from multiple Nested Json using PHP [duplicate]使用 PHP 从多个嵌套 Json 中提取数据 [重复]
【发布时间】:2021-12-30 11:13:54
【问题描述】:

这是json

{"msg":"OK","server_time":"2021-11-19 16:41:22","status":200,"result":{"total_pages":1,"files":[{"download_url":"DOWNLOADLINKHERE1","single_img":"IMAGEURLHERE1","file_code":"CODEHERE1","title":"TITLEHERE1"},{"download_url":"DOWNLOADLINKHERE2","single_img":"IMAGEURLHERE2","file_code":"CODEHERE2","title":"TITLEHERE2"}],"results_total":"2","results":2}}

这是我的代码

$json = json_decode($data);
foreach($json["result"] as $result){
    foreach($result["files"] as $file){
        echo $file["file_code"];
    }
}

我想从“file_code”中提取所有值。我有一个错误 警告:为 foreach() 提供的参数无效

我能够得到第一个使用的价值

echo $json->result->files[0]->file_code;

是否可以对文件[0] 使用 LOOP?

【问题讨论】:

  • 那么您是否检查了您提供给foreach 的参数?
  • var_dump($json);
  • 这能回答你的问题吗? json_decode to array
  • 我编辑了这个问题。也缩短了 json。

标签: php json api


【解决方案1】:

这一行:

foreach($json["result"] as $result){

$json['result'] 视为一个对象,因此下一行测试不存在的total_pages["files"]

将两个foreach 放在一起解决了这个问题:

$data='{"msg":"OK","server_time":"2021-11-19 16:41:22","status":200,"result":{"total_pages":1,"files":[{"download_url":"DOWNLOADLINKHERE1","single_img":"IMAGEURLHERE1","file_code":"CODEHERE1","title":"TITLEHERE1"},{"download_url":"DOWNLOADLINKHERE2","single_img":"IMAGEURLHERE2","file_code":"CODEHERE2","title":"TITLEHERE2"}],"results_total":"2","results":2}}';

$json = json_decode($data, true);
foreach($json["result"]["files"] as $file)
        print $file["file_code"];

Teh playground

或者,将 JSON result 制作成一个数组,并使用对象属性访问器而不是关联数组绑定。

$data='{"msg":"OK","server_time":"2021-11-19 16:41:22","status":200,"result":[{"total_pages":1,"files":[{"download_url":"DOWNLOADLINKHERE1","single_img":"IMAGEURLHERE1","file_code":"CODEHERE1","title":"TITLEHERE1"},{"download_url":"DOWNLOADLINKHERE2","single_img":"IMAGEURLHERE2","file_code":"CODEHERE2","title":"TITLEHERE2"}],"results_total":"2","results":2}]}';
$json = json_decode($data);
foreach($json->result as $result){
    foreach($result->files as $file){
        echo $file->file_code;
    }
}

Teh playground

【讨论】:

    【解决方案2】:

    我复制了您的情况,结果发现您的 JSON 无效。最后你错过了}

    没有得到异常的原因是因为json_decode默认不抛出错误。您可以通过添加 JSON_THROW_ON_ERROR 标志来实现, 阅读docs了解更多信息。

    【讨论】:

    • 提供的 JSON 数据显然不完整,因为.... 不是有效的 JSON。如果 JSON 无效,则由拼写错误导致的问题不符合主题,不应回答。
    • @miken32 删除 .... 后,JSON 仍然无效。
    • json 我猜已经被编辑和更正了
    • 您是否尝试过使用该 json 再次运行代码?
    【解决方案3】:

    这对我来说很完美。如果您有任何想法,请随时纠正我。

    $num = count($json->result->files);
    echo $num;
    
    for($i=0;$i<$num;$i++)
        {
    echo $json->result->files[$i]->file_code;
        }
    

    【讨论】:

      猜你喜欢
      • 2015-04-22
      • 2020-02-01
      • 1970-01-01
      • 2021-06-10
      • 2019-08-25
      • 1970-01-01
      • 2020-06-28
      • 1970-01-01
      • 2022-07-12
      相关资源
      最近更新 更多