0

0

PHP中从JSON子数组获取数据

心靈之曲

心靈之曲

发布时间:2025-11-13 16:43:22

|

424人浏览过

|

来源于php中文网

原创

PHP中从JSON子数组获取数据

本教程详细介绍了如何在php中解析json字符串,并从嵌套的子数组中准确提取特定数据。通过使用`json_decode`函数将json字符串转换为php关联数组,您可以轻松地通过数组键和索引访问深层结构中的数据,避免常见的解析错误,从而实现高效的数据处理和数据提取。

理解JSON与PHP数据类型映射

在PHP中处理JSON数据时,首先需要理解JSON数据结构如何映射到PHP的数据类型。

  • JSON对象 {}:默认情况下,json_decode()会将JSON对象转换为PHP的stdClass对象。如果将json_decode()的第二个参数设置为true,它会将JSON对象转换为PHP的关联数组。
  • JSON数组 []:无论第二个参数如何设置,JSON数组都会被转换为PHP的索引数组。
  • JSON基本类型:字符串、数字、布尔值和null会直接映射到对应的PHP基本类型。

为了更方便地通过键名访问数据,尤其是在处理多层嵌套结构时,通常推荐将JSON对象解码为PHP关联数组。

解析JSON字符串为PHP关联数组

要将JSON字符串解析为PHP可操作的数据结构,我们使用json_decode()函数。关键在于其第二个参数。当这个参数设置为true时,所有JSON对象都将被解码为关联数组。

考虑以下JSON字符串:

立即学习PHP免费学习笔记(深入)”;

{
    "msg": "OK",
    "server_time": "2021-12-04 20:33:26",
    "status": 200,
    "result": [
        {
            "single_img": "8eybbqf5nnta6vcw.jpg",
            "file_code": "vg1fkuag1tsa",
            "splash_img": "8eybbqf5nnta6vcw.jpg",
            "canplay": 1,
            "views": "0",
            "length": "2370",
            "uploaded": "2021-12-04 13:28:35",
            "title": "(Hands On Ed Class / 12.04.2021)"
        }
    ]
}

要将其解码为关联数组,代码如下:

访问嵌套子数组中的数据

一旦JSON字符串被成功解码为关联数组,我们就可以像访问普通PHP多维数组一样,通过键名和索引来逐层深入,提取所需的数据。

杰易OA办公自动化系统6.0
杰易OA办公自动化系统6.0

基于Intranet/Internet 的Web下的办公自动化系统,采用了当今最先进的PHP技术,是综合大量用户的需求,经过充分的用户论证的基础上开发出来的,独特的即时信息、短信、电子邮件系统、完善的工作流、数据库安全备份等功能使得信息在企业内部传递效率极大提高,信息传递过程中耗费降到最低。办公人员得以从繁杂的日常办公事务处理中解放出来,参与更多的富于思考性和创造性的工作。系统力求突出体系结构简明

下载

根据上面的JSON结构,我们想要获取"single_img"的值。这个值位于"result"键对应的数组的第一个元素(索引为0)中。

访问路径如下:

  1. 首先,通过 $data['result'] 访问到最外层的 result 键。
  2. result 键对应的是一个JSON数组,在PHP中它会变成一个索引数组。我们需要访问这个索引数组的第一个元素,即 $data['result'][0]。
  3. 这个第一个元素又是一个JSON对象,解码后是一个关联数组。在这个关联数组中,我们通过键名 'single_img' 来获取最终的值,即 $data['result'][0]['single_img']。

常见错误及纠正

原始问题中出现了一个常见的错误:在成功解码JSON为PHP数据结构后,又尝试使用 json_encode() 来访问其内部属性。

// 错误示例:
$do = json_decode($video); // 解码为对象
$result= json_encode($do->result); // 将 $do->result (一个PHP数组) 再次编码成JSON字符串
echo json_encode($result->single_img); // 尝试在字符串上访问属性,导致错误

这里的关键误解在于:

  1. json_decode() 的目的是将JSON字符串转换为PHP的数据类型(对象或数组)。一旦完成,您就应该使用PHP原生的语法(-> 访问对象属性或 [] 访问数组元素)来操作数据。
  2. json_encode() 的目的是将PHP数据类型转换回JSON字符串。在已经获得PHP数据结构后,不应该再使用 json_encode() 去“解析”或“访问”数据。这样做只会将PHP数据再次转换为字符串,使得无法通过对象属性或数组键进行访问。

正确的做法是,在 json_decode() 之后,直接使用PHP的数组或对象访问语法。如果解码为对象,则使用 $object->property;如果解码为关联数组,则使用 $array['key']。

注意事项

  1. 错误处理:json_decode() 在解析失败时会返回 null。在实际应用中,务必检查解码结果以及JSON解析错误:
    $data = json_decode($videoJson, true);
    if (json_last_error() !== JSON_ERROR_NONE) {
        echo "JSON解码错误: " . json_last_error_msg();
        // 处理错误,例如记录日志或返回错误响应
    }
  2. 键/索引存在性检查:在访问多层嵌套数据时,始终使用 isset() 或 empty() 等函数检查键或索引是否存在,以避免在数据结构不符合预期时产生“Undefined index”或“Trying to get property of non-object”的警告或错误。
    if (isset($data['result']) && is_array($data['result']) && isset($data['result'][0]['single_img'])) {
        $singleImg = $data['result'][0]['single_img'];
        echo $singleImg;
    } else {
        echo "数据结构不符合预期或 'single_img' 不存在。";
    }
  3. 数据类型验证:在访问数据之前,确认中间层的数据类型是否符合预期(例如,$data['result'] 应该是一个数组)。

总结

从PHP中的JSON子数组提取数据是一个常见的操作。通过正确使用 json_decode($jsonString, true) 将JSON字符串解析为关联数组,您可以利用PHP原生的数组访问语法 ($array['key'][index]['subkey']) 高效且准确地定位并提取深层嵌套的数据。同时,结合错误处理和键/索引存在性检查,可以使您的代码更加健壮和可靠。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2816

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1691

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1549

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

1036

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1485

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1256

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1589

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1307

2023.11.13

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 9.2万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 10.1万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号