PHP json_decode()函数详解

这篇具有很好参考价值的文章主要介绍了PHP json_decode()函数详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》

json_decode() 可以对JSON字符串「解码」,并转换为PHP变量。

语法

mixed json_decoce( $json_str, assoc, depth, options )

参数

  • $json_str :需要解码的JSON字符串,只能处理UTF-8编码的数据
  • assoc :布尔类型,true返回数组,(默认)false返回对象
  • depth :整数类型,递归的深度(默认512层),最大 2147483647 层
  • options :二进制掩码,目前只支持 JSON_BIGINT_AS_STRING

返回值

  • 通过恰当的类型,返回解码后的数据,默认返回对象类型。
  • JSON格式错误 或 超过递归解析深度 或 false 或 null,就返回null。

一、返回数组类型

json_decode() 默认返回「对象」类型,如果想返回「数组」类型,就将 assoc 参数设置为true。 assoc 参数可省略,默认为false。

实例:

var_dump(json_decode('{"key1":"value1","key2":"value2"}'));
var_dump(json_decode('{"key1":"value1","key2":"value2"}', true));

输出:

object(stdClass)#1 (2) {
  ["key1"]=>
  string(6) "value1"
  ["key2"]=>
  string(6) "value2"
}
array(2) {
  ["key1"]=>
  string(6) "value1"
  ["key2"]=>
  string(6) "value2"
}

options 参数设置为 JSON_OBJECT_AS_ARRAY 时,也可以转换成「数组」类型。

实例:

var_dump(json_decode('{"key1":"value1","key2":"value2"}', JSON_OBJECT_AS_ARRAY));

输出:

array(2) {
  ["key1"]=>
  string(6) "value1"
  ["key2"]=>
  string(6) "value2"
}

二、JSON的键和值必须用双引号

「解析」的JSON字符串,最外侧用单引号包裹,里面的键值对用「双引号」包裹,才能正常解析,否则会返回null。

实例:

var_dump(json_decode('{"key1":"value1","key2":"value2"}'));
var_dump(json_decode("{'key1':'value1','key2':'value2'}"));

输出:

object(stdClass)#1 (2) {
  ["key1"]=>
  string(6) "value1"
  ["key2"]=>
  string(6) "value2"
}
NULL

这时,(PHP 7.3以上)可以设置参数 options 为JSON_THROW_ON_ERROR,使其在解析错误时抛出异常,方便我们及时处理错误。


三、返回null问题

除了刚才提到的JSON字符串格式错误会返回null,还有其他的原因。

遇到返回null的问题时,可以在 json_decode() 后面,打印 json_last_error() 查看错误。

实例:

var_dump(json_decode("{'key1':'value1','key2':'value2'}"));
echo json_last_error();

输出:

NULL
4

json_last_error() 返回值解析:

  • 0 = JSON_ERROR_NONE //没有错误
  • 1 = JSON_ERROR_DEPTH //超过最大堆栈深度
  • 2 = JSON_ERROR_STATE_MISMATCH //无效或异常的json
  • 3 = JSON_ERROR_CTRL_CHAR //控制字符错误,可能是编码不对
  • 4 = JSON_ERROR_SYNTAX //JSON字符串语法错误
  • 5 = JSON_ERROR_UTF8 //异常的UTF-8字符,只能处理UTF8编码的数据

四、大整数问题

options 参数设置为 JSON_BIGINT_AS_STRING,可以将超过PHP整型「最大值」的整数解析为字符串。


五、传入非字符串类型

如果传入的不是字符串类型,就不会解码,或者说「无法解码」

  • 数值型会原样返回
  • 运算符会运算后返回运算结果
  • 布尔型(true返回1,false返回NULL)
  • null会返回NULL

实例:

var_dump(json_decode(10));
var_dump(json_decode(10.11));
var_dump(json_decode(1*2));
var_dump(json_decode(true));
var_dump(json_decode(false));
var_dump(json_decode(null));

输出:

int(10)
float(10.11)
int(2)
int(1)
NULL
NULL

六、强制类型转换

解码后进行「强制类型转换」

实例:

var_dump((array)json_decode(10));
var_dump((int)json_decode(false));

输出:文章来源地址https://www.toymoban.com/news/detail-655844.html

array(1) {
  [0]=>
  int(10)
}
int(0)

到了这里,关于PHP json_decode()函数详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • jieba分词+sklearn文本特征提取时报错‘list‘ object has no attribute ‘decode‘

    jieba分词 先上错误代码: 运行之后,就会报错\\\'list\\\' object has no attribute \\\'decode\\\' 修改代码如下: 这样再运行就可以了。 完整的jieba分词+sklearn文本特征提取代码如下: 运行结果如下:

    2024年02月12日
    浏览(42)
  • Python Slice函数:数据处理利器详解

      在Python编程中,处理数据是一个非常常见且重要的任务。为了更高效地处理数据,Python提供了许多内置函数和方法。其中,slice()函数是一个非常强大且常用的工具,它可以帮助我们轻松地提取、操作和处理数据。无论是字符串、列表还是元组,slice()函数都能够胜任。本文

    2024年01月22日
    浏览(44)
  • sklearn Preprocessing 数据预处理功能

     文章最前 : 我是Octopus,这个名字来源于我的中文名--章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的动态,一起学习,共同进步。  相关文章: XGboost进行时间序

    2024年02月11日
    浏览(34)
  • python机器学习(三)特征预处理、鸢尾花案例--分类、线性回归、代价函数、梯度下降法、使用numpy、sklearn实现一元线性回归

    数据预处理的过程。数据存在不同的量纲、数据中存在离群值,需要稳定的转换数据,处理好的数据才能更好的去训练模型,减少误差的出现。 标准化 数据集的标准化对scikit-learn中实现的大多数机器学习算法来说是常见的要求,很多案例都需要标准化。如果个别特征或多或

    2024年02月16日
    浏览(46)
  • MYSQL JSON函数详解和实战(JSON函数大全,内含示例)

    MySQL提供了许多JSON函数,用于对JSON数据进行各种处理。以下是一些常用的JSON函数。 建议收藏以备后续用到查阅参考 。 目录 一、JSON_EXTRACT 提取指定数据 二、JSON_UNQUOTE 取消双引号 三、JSON_KEYS 取成员的数组 四、JSON_ARRAY 将参数转为数组 五、JSON_OBJECT 参数转为对象 六、JSO

    2024年02月04日
    浏览(49)
  • PHP8内置函数中的数学函数-PHP8知识详解

    php8中提供了大量的内置函数,以便程序员直接使用常见的内置函数包括数学函数、变量函数、字符串函数、时间和日期函数等。今天介绍内置函数中的数学函数。 本文讲到了数学函数中的随机数函数rand()、舍去法取整函数floor()、向上取整函数 ceil()、对浮点数进行四舍五入

    2024年02月10日
    浏览(51)
  • PHP substr()函数详解,PHP截取字符串。

    「作者主页」: 士别三日wyx 「作者简介」: CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」: 对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 substr() 可以 「截取」 字符串。 语法 参数 $str :被截取的字符串。 start :开

    2024年02月12日
    浏览(52)
  • 「PHP系列」PHP文件处理及文件上传详解

    PHP 提供了丰富的文件处理功能,使得开发者可以方便地在服务器端进行文件的创建、读取、写入、删除等操作。以下是一些常见的 PHP 文件处理操作及其示例: 使用 fopen() 函数打开文件: 模式可以是以下之一: \\\"r\\\" :只读方式打开,将文件指针指向文件头。 \\\"w\\\" :写入方式打

    2024年04月22日
    浏览(45)
  • Mysql当中Json相关的函数详解

    从5.7开始,MySQL开始支持json类型,用于存储JSON数据。提供数据类型的同时也提供了很多关于json的函数供我们使用,本篇文章基本上都来源于官网;https://dev.mysql.com/doc/refman/8.0/ja/json-function-reference.html 2.1.JSON_ARRAY(转换json数组) 描述: JSON_ARRAY() 接受一个值列表(可能为NULL),并

    2024年02月08日
    浏览(39)
  • PHP isset()函数使用详解,PHP判断变量是否存在

    「作者主页」: 士别三日wyx 「作者简介」: CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」: 对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 isset() 函数可以检测 「变量是否存在」 并非NULL。常用来判断变量是否被定义

    2024年02月08日
    浏览(128)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包