为了账号安全,请及时绑定邮箱和手机立即绑定

使用 PHP 显示 JSON 数据中的多个嵌套项

使用 PHP 显示 JSON 数据中的多个嵌套项

PHP
凤凰求蛊 2023-04-15 10:53:54
我正在尝试从 PHP 中的 JSON 文件中解析一些数据。现在,我让它在本地工作,但是当我把它放到网站上时,我收到了警告错误( Warning: Invalid argument supplied for foreach() )请帮忙,我对此很陌生,并且绕着圈子阅读并试图弄清楚。基本上,我想列出所有“艺术家”并包括他们的姓名、UUID 和图像。JSON{    "items": [        {            "title": null,            "itemType": "artist",            "moreTrackingTitle": "All Artists",            "items": [                {                    "Artist": "Artist One",                    "UUID": "364226",                    "Image": "http://theurl.com",                },                {                    "Artist": "Artist Two",                    "UUID": "1513513",                    "Image": "http://theurl.com",                },                {                    "Artist": "Artist Three",                    "UUID": "214141",                    "Image": "http://theurl.com",                }            ]        },    ],    "nextPageToken": null}PHP$request = wp_remote_get( 'http://EXTERNAL-JSON-FILE' );    $body = wp_remote_retrieve_body( $request );    $data =json_decode($body, true);    foreach($data as $k1 => $v1) {        foreach($v1 as $k2 => $v2) {            foreach($v2 as $k3 => $v3) {                foreach($v3 as $artist) {                    echo $artist['Artist'];                    echo $artist['UUID'];                    echo $artist['Image'];                }            }        }    }
查看完整描述

1 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

无效的 JSON

json_decode失败(无提示)并返回,null因为这不是有效的 JSON 文档。JSON 不允许在数组的最后一项或对象的最后列出的属性上使用逗号。你从哪里得到这个 JSON 文档?这是有效的 Javascript,但不是有效的 JSON。


违规行是:


                {

                    "Artist": "Artist One",

                    "UUID": "364226",

                    "Image": "http://theurl.com", <-- remove this in the other objects too

                },


                }

            ]

        }, <-- remove this

    ],

    "nextPageToken": null

}

希望你拥有这个“外部 json 文件”并且可以编辑它,否则就没有办法解决它。用json linter检查你的 json 文件。


错误使用嵌套foreach循环

要得到你想要的东西(假设每个项目都是“艺术家”):


foreach($data["items"] as $item){

    foreach($item["items"] as $artist){

        echo $artist["Artist"];

        echo $artist["UUID"];

        echo $artist["Image"];

    }

}

你不应该foreachJSON 对象的每个属性,只有那些是可迭代的。


附录

这是固定的 json 文件,删除了有问题的逗号:


{

    "items": [

        {

            "title": null,

            "itemType": "artist",

            "moreTrackingTitle": "All Artists",

            "items": [

                {

                    "Artist": "Artist One",

                    "UUID": "364226",

                    "Image": "http://theurl.com"

                },

                {

                    "Artist": "Artist Two",

                    "UUID": "1513513",

                    "Image": "http://theurl.com"

                },

                {

                    "Artist": "Artist Three",

                    "UUID": "214141",

                    "Image": "http://theurl.com"

                }

            ]

        }

    ],

    "nextPageToken": null

}

要强制 PHP 在读取无效的 JSON 字符串时抛出异常而不是返回 null,请将 JSON_THROW_ON_ERROR 作为第四个参数传递:


$data = json_decode(file_get_contents("data.json"), true, 512, JSON_THROW_ON_ERROR);



查看完整回答
反对 回复 2023-04-15
  • 1 回答
  • 0 关注
  • 130 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信