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 快速生成 Flash 动画的方法
Mar 06 PHP
用PHP调用Oracle存储过程的方法
Sep 12 PHP
浅析php中三个等号(===)和两个等号(==)的区别
Aug 06 PHP
使用php验证复选框有效性的示例
Nov 13 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
Jun 19 PHP
laravel 4安装及入门图文教程
Oct 29 PHP
PHP中UNIX时间戳和日期间的转换与计算实例
Nov 19 PHP
一个非常完美的读写ini格式的PHP配置类分享
Feb 12 PHP
php生成数字字母的验证码图片
Jul 14 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
Jul 03 PHP
Laravel 微信小程序后端搭建步骤详解
Nov 26 PHP
浅谈PHP7中的一些小技巧
May 29 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页面消耗内存过大的处理办法
2013/03/18 PHP
php使浏览器直接下载pdf文件的方法
2013/11/15 PHP
采用ThinkPHP中F方法实现快速缓存实例
2014/06/13 PHP
CodeIgniter表单验证方法实例详解
2016/03/03 PHP
php fread读取文件注意事项
2016/09/24 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
2019/09/04 PHP
用js实现上传图片前的预览(TX的面试题)
2007/08/14 Javascript
基于jQuery的消息提示插件之旅 DivAlert(三)
2010/04/01 Javascript
Javascript写入txt和读取txt文件示例
2014/02/12 Javascript
使用node.js 获取客户端信息代码分享
2014/11/26 Javascript
详解JavaScript的回调函数
2015/11/20 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
2015/11/26 Javascript
javascript字符串函数汇总
2015/12/06 Javascript
jqueryMobile使用示例分享
2016/01/12 Javascript
js动态添加的DIV中的onclick事件简单实例
2016/07/25 Javascript
jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
2018/04/27 jQuery
vue、react等单页面项目部署到服务器的方法及vue和react的区别
2018/09/29 Javascript
Vue keepAlive 数据缓存工具实现返回上一个页面浏览的位置
2019/05/10 Javascript
用python读写excel的方法
2014/11/18 Python
Python中使用第三方库xlrd来读取Excel示例
2015/04/05 Python
Python抓取百度查询结果的方法
2015/07/08 Python
Python WXPY实现微信监控报警功能的代码
2017/10/20 Python
python编写分类决策树的代码
2017/12/21 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
2019/03/01 Python
python 列表推导式使用详解
2019/08/29 Python
利用Tensorflow构建和训练自己的CNN来做简单的验证码识别方式
2020/01/20 Python
Python SMTP配置参数并发送邮件
2020/06/16 Python
selenium判断元素是否存在的两种方法小结
2020/12/07 Python
html5默认气泡修改的代码详解
2020/03/13 HTML / CSS
美国地毯购买网站:Rugs USA
2019/02/23 全球购物
预防艾滋病宣传活动总结
2015/05/09 职场文书
golang interface判断为空nil的实现代码
2021/04/24 Golang
pandas:get_dummies()与pd.factorize()的用法及区别说明
2021/05/21 Python
pandas提升计算效率的一些方法汇总
2021/05/30 Python
如何用Python搭建gRPC服务
2021/06/30 Python