PHP 实现 JSON 数据的编码和解码操作详解


Posted in PHP onApril 22, 2020

本文实例讲述了PHP 实现 JSON 数据的编码和解码操作。分享给大家供大家参考,具体如下:

JSON 的使用场景:

  1. 数据表一个字段需要记录多个信息,如记录关于用户的其他信息
  2. 数据传输,如:API接口返回值、Ajax中实现异步加载
  3. 配置文件,如 composer.json 包管理配置文件

在 PHP 中使用 JSON:

JSON 使用最频繁的两个操作就是编码和解析数据,PHP 官方提供了以下 2 个函数实现这两个操作:

  1. json_encode()
  2. json_decode()

Encoding and Decoding

编码用于将数据绑定到特定格式。需要此过程来保持数据一致性。解码是一个反向过程,它将编码的数据还原回其原始形式。

PHP JSON Encode

使用 json_encode 将 PHP 的一些数据类型转换为 JSON 格式,函数包含 3 个参数,分别为:

  • 将要编码的数据
  • 带有 JSON encode 常量的选项可以反映对编码行为的影响
  • 编码的深度限制

PHP 中预定义的 JSON 常量

JSON_FORCE_OBJECT
JSON_HEX_QUOT
JSON_HEX_TAG
JSON_HEX_AMP
JSON_HEX_APOS
JSON_INVALID_UTF8_IGNORE
JSON_INVALID_UTF8_SUBSTITUTE
JSON_NUMERIC_CHECK
JSON_PARTIAL_OUTPUT_ON_ERROR
JSON_PRESERVE_ZERO_FRACTION
JSON_PRETTY_PRINT
JSON_UNESCAPED_LINE_TERMINATORS
JSON_UNESCAPED_SLASHES
JSON_UNESCAPED_UNICODE
JSON_THROW_ON_ERROR

Example: PHP json_encode()

<?php
$input_array = array("zero","one","two");
//returns ["zero","one","two"] 

$str_json_format = json_encode($input_array);
print "JSON Formatted String:" . $str_json_format;
//returns {"0":"zero","1":"one","2":"two"}

$obj_json_format = json_encode($input_array, JSON_FORCE_OBJECT);
print "<br/><br/>JSON Object:" . $obj_json_format;
//returns [ "zero", "one", "two" ]

$strJsonFormat_with_space = json_encode($input_array, JSON_PRETTY_PRINT);
print "<br/><br/>JSON Formatted String with white space:" . $strJsonFormat_with_space;

PHP JSON Decode

这是 JSON encode 的反向操作,用于将 JSON 编码的数据转换为最初编码的 PHP数据类型。

json_decode 函数包含 4 个参数,分别为:

  • 将要解析的 JSON 字符串
  • 当该参数为 TRUE 时,将返回 array 而非 object
  • 指定递归深度
  • JSON 常量
    JSON_BIGINT_AS_STRING, JSON_INVALID_UTF8_IGNORE, JSON_INVALID_UTF8_SUBSTITUTE, JSON_OBJECT_AS_ARRAY, JSON_THROW_ON_ERROR

返回值:

返回值为 TRUE, FALSENULL
如果 json 无法被解码, 或者编码数据深度超过了递归限制的话,将会返回NULL

Example: PHP json_encode()

<?php
$str_json_array_decoded = json_decode($str_json_format);
print "<br/><br/>Resultant decoded array from JSON array:<br/>";
print "<PRE>";
print_r($str_json_array_decoded);
print "</PRE>";

$str_objJson_decoded = json_decode($obj_json_format);
print "<br/><br/>Resultant decoded object data from JSON object:<br/>";
print "<PRE>";
print_r($str_objJson_decoded);
print "</PRE>";

$str_jsonAry_decoded = json_decode($obj_json_format,true);
print "<br/><br/>Resultant decoded array data from JSON object:<br/>";
print "<PRE>";
print_r($str_jsonAry_decoded);
print "</PRE>";

注意:

  1. PHP 可以将任意数据类型转换为 JSON 格式,除了 resource data
  2. JSON 解码时,必须先去除掉字符串中的反斜杠 "\",不然会导致解析失败,可以使用 stripslashes 对字符串进行处理后,再使用 json_decode 解析

如果需要解码的 JSON 数据中包含有反斜杠 "\",应该使用如下代码进行解码:

$obj = \json_decode(stripslashes($json));

PHP 相关文章推荐
十天学会php之第十天
Oct 09 PHP
PHP的FTP学习(四)
Oct 09 PHP
PHP has encountered an Access Violation 错误的解决方法
Jan 17 PHP
php 生成随机验证码图片代码
Feb 08 PHP
php+iframe实现隐藏无刷新上传文件
Feb 10 PHP
PHP实现模仿socket请求返回页面的方法
Nov 04 PHP
SAE实时日志接口SDK用法示例
Oct 09 PHP
Laravel5中防止XSS跨站攻击的方法
Oct 10 PHP
Joomla框架实现字符串截取的方法示例
Jul 18 PHP
PHP7扩展开发之hello word实现方法详解
Jan 15 PHP
php 策略模式原理与应用深入理解
Sep 25 PHP
phpquery中文手册
Mar 18 PHP
PHP 实现 WebSocket 协议原理与应用详解
Apr 22 #PHP
php模拟实现斗地主发牌
Apr 22 #PHP
PHP实现随机发扑克牌
Apr 22 #PHP
PHP使用PDO 连接与连接管理操作实例分析
Apr 21 #PHP
PHP实现随机发放扑克牌
Apr 21 #PHP
PHP 构造函数和析构函数原理与用法分析
Apr 21 #PHP
PHP 对象继承原理与简单用法示例
Apr 21 #PHP
You might like
php自动给文章加关键词链接的函数代码
2012/11/29 PHP
php中单个数据库字段多列显示(单字段分页、横向输出)
2014/07/28 PHP
PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF
2016/02/19 PHP
php实现图片上传、剪切功能
2016/05/07 PHP
在网页中控制wmplayer播放器
2006/07/01 Javascript
基于JQuery的简单实现折叠菜单代码
2010/09/15 Javascript
js模仿html5 placeholder适应于不支持的浏览器
2013/01/13 Javascript
JavaScript采用递归算法计算阶乘实例
2015/08/04 Javascript
基于jquery实现左右按钮点击的图片切换效果
2021/01/27 Javascript
BootStrap的弹出框(Popover)支持鼠标移到弹出层上弹窗层不隐藏的原因及解决办法
2016/04/03 Javascript
创建一个类Person的简单实例
2016/05/17 Javascript
Three.js学习之正交投影照相机
2016/08/01 Javascript
轻松理解Javascript变量的相关问题
2017/01/20 Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
2017/03/30 Javascript
xmlplus组件设计系列之网格(DataGrid)(10)
2017/05/05 Javascript
浅谈PDF.js使用心得
2018/06/07 Javascript
python中文编码问题小结
2014/09/28 Python
django自带serializers序列化返回指定字段的方法
2019/08/21 Python
python实现身份证实名认证的方法实例
2019/11/08 Python
Python字典深浅拷贝与循环方式方法详解
2020/02/09 Python
pycharm配置python 设置pip安装源为豆瓣源
2021/02/05 Python
css3 border旋转时的动画应用
2016/01/22 HTML / CSS
美国Curacao百货连锁店网站:iCuracao.com
2019/07/20 全球购物
澳洲网红粉泥面膜:Sand & Sky
2019/08/13 全球购物
初中生学习生活的自我评价
2013/11/20 职场文书
医学生自荐信
2013/12/03 职场文书
应届毕业生个人求职自荐信
2014/01/06 职场文书
《会走路的树》教后反思
2014/04/19 职场文书
抗洪抢险事迹材料
2014/05/06 职场文书
2014年大学生党员评议表自我评价
2014/09/20 职场文书
三潭印月的导游词
2015/02/12 职场文书
2015年企业工作总结范文
2015/04/28 职场文书
卫生院艾滋病宣传活动总结
2015/05/09 职场文书
一文简单了解MySQL前缀索引
2022/04/03 MySQL
vue 自定义的组件绑定点击事件
2022/04/21 Vue.js
Oracle查看表空间使用率以及爆满解决方案详解
2022/07/23 Oracle