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面向对象全攻略 (一) 面向对象基础知识
Sep 30 PHP
php foreach 参数强制类型转换的问题
Dec 10 PHP
关于php curl获取301或302转向的网址问题的解决方法
Jun 02 PHP
Thinkphp模板中使用自定义函数的方法
Sep 23 PHP
一个显示效果非常不错的PHP错误、异常处理类
Mar 21 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
Nov 19 PHP
php获取用户浏览器版本的方法
Jan 03 PHP
Windows下Apache + PHP SESSION丢失的解决过程全纪录
Apr 07 PHP
android上传图片到PHP的过程详解
Aug 03 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
Jan 07 PHP
php实现的mysqldb读写分离操作类示例
Feb 07 PHP
php使用Jpgraph创建3D饼形图效果示例
Feb 15 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判断指定时间段的2个方法
2014/03/14 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
2014/08/19 PHP
laravel学习笔记之模型事件的几种用法示例
2017/08/15 PHP
YII框架http缓存操作示例
2019/04/29 PHP
php5对象复制、clone、浅复制与深复制实例详解
2019/08/14 PHP
浅谈javascript 面向对象编程
2009/10/28 Javascript
JS 事件绑定函数代码
2010/04/28 Javascript
js 手机号码合法性验证代码集合
2012/09/29 Javascript
jQuery事件 delegate()使用方法介绍
2012/10/30 Javascript
jQuery+JSON+jPlayer实现QQ空间音乐查询功能示例
2013/06/17 Javascript
使用js对select动态添加和删除OPTION示例代码
2013/08/12 Javascript
如何用jquery控制表格奇偶行及活动行颜色
2014/04/20 Javascript
require.js深入了解 require.js特性介绍
2014/09/04 Javascript
完善的jquery处理机制
2016/02/21 Javascript
jQuery旋转插件jqueryrotate用法详解
2016/10/13 Javascript
js 提交form表单和设置form表单请求路径的实现方法
2016/10/25 Javascript
详解利用 Express 托管静态文件的方法
2017/09/18 Javascript
详解JSONObject和JSONArray区别及基本用法
2017/10/25 Javascript
vue中的模态对话框组件实现过程
2018/05/01 Javascript
Node.js引入UIBootstrap的方法示例
2018/05/11 Javascript
js实现删除li标签一行内容
2019/04/16 Javascript
js回调函数原理与用法案例分析
2020/03/04 Javascript
js canvas实现俄罗斯方块
2020/10/11 Javascript
Python实现解析Bit Torrent种子文件内容的方法
2017/08/29 Python
python async with和async for的使用
2019/06/20 Python
pytorch 准备、训练和测试自己的图片数据的方法
2020/01/10 Python
python求最大公约数和最小公倍数的简单方法
2020/02/13 Python
25个CSS3动画按钮和菜单教程分享
2012/10/03 HTML / CSS
C#笔试题和英文面试题
2013/02/07 面试题
销售自我评价
2013/10/22 职场文书
国贸类专业毕业生的求职信分享
2013/12/08 职场文书
幼儿园实习自我鉴定
2013/12/15 职场文书
阿里云Nginx配置https实现域名访问项目(图文教程)
2021/03/31 Servers
解析CSS 提取图片主题色功能(小技巧)
2021/05/12 HTML / CSS
Redis集群的关闭与重启操作
2021/07/07 Redis
MySQL Server 层四个日志
2022/03/31 MySQL