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+AJAX传送中文会导致乱码的问题的解决方法
Sep 08 PHP
通过JavaScript或PHP检测Android设备的代码
Mar 09 PHP
PHP中获取文件扩展名的N种方法小结
Feb 27 PHP
通过PHP的内置函数,通过DES算法对数据加密和解密
Jun 21 PHP
php 验证码(倾斜,正弦干扰线,黏贴,旋转)
Jun 29 PHP
php获取远程图片体积大小的实例
Nov 12 PHP
php+ajax导入大数据时产生的问题处理
Jun 11 PHP
getJSON跨域SyntaxError问题分析
Aug 07 PHP
yii2.0之GridView自定义按钮和链接用法
Dec 15 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
Nov 14 PHP
PHP 实现浏览记录并按日期分组
May 11 PHP
PHP控制循环操作的时间
Apr 01 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
初学者入门:细述PHP4的核心Zend
2006/09/05 PHP
php引用地址改变变量值的问题
2012/03/23 PHP
PHP多线程之内部多线程实例分析
2015/03/09 PHP
PHPExcel实现的读取多工作表操作示例
2020/04/14 PHP
jquery ajax例子返回值详解
2012/09/11 Javascript
通过隐藏iframe实现文件下载的js方法介绍
2014/02/26 Javascript
director.js实现前端路由使用实例
2015/02/03 Javascript
基于jquery步骤进度条源码分享
2015/11/12 Javascript
Javascript类型转换的规则实例解析
2016/02/23 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
Bootstrap和Java分页实例第二篇
2016/12/23 Javascript
JavaScript中清空数组的三种方式
2017/03/22 Javascript
JavaScript如何一次性展示几万条数据
2017/03/30 Javascript
input type=file 选择图片并且实现预览效果的实例
2017/10/26 Javascript
vue+vue-validator 表单验证功能的实现代码
2017/11/13 Javascript
tween.js缓动补间动画算法示例
2018/02/13 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
详解vue-cli项目在IE浏览器打开报错解决方法
2020/12/10 Vue.js
Python中使用tarfile压缩、解压tar归档文件示例
2015/04/05 Python
ubuntu系统下 python链接mysql数据库的方法
2017/01/09 Python
pandas groupby 分组取每组的前几行记录方法
2018/04/20 Python
如何用python写一个简单的词法分析器
2018/12/18 Python
Python3.5文件修改操作实例分析
2019/05/01 Python
GDAL 矢量属性数据修改方式(python)
2020/03/10 Python
python中数字是否为可变类型
2020/07/08 Python
Python从MySQL数据库中面抽取试题,生成试卷
2021/01/14 Python
阿联酋航空丹麦官方网站:Emirates DK
2019/08/25 全球购物
西班牙Polo衫品牌:Polo Club
2020/08/09 全球购物
J2SDK1.5与J2SDK5.0有什么区别
2012/09/19 面试题
师范应届毕业生自荐信
2013/11/18 职场文书
小学信息技术教学反思
2014/02/10 职场文书
俄语专业职业生涯规划
2014/02/26 职场文书
教师年度考核评语
2014/04/28 职场文书
思想作风纪律整顿心得体会
2014/09/04 职场文书
生产车间主任岗位职责
2015/04/08 职场文书
大学毕业论文致谢词
2015/05/14 职场文书