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 批量更新网页内容实现代码
Jan 05 PHP
php header Content-Type类型小结
Jul 03 PHP
php打开文件fopen函数的使用说明
Jul 05 PHP
php生成随机数的三种方法
Sep 10 PHP
Drupal简体中文语言包安装教程
Sep 27 PHP
PHP添加图片水印、压缩、剪切的封装类
Aug 17 PHP
PHP上传文件参考配置大文件上传
Dec 16 PHP
PHP模板引擎Smarty内建函数详解
Apr 11 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
Aug 19 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
Oct 19 PHP
YII2框架中excel表格导出的方法详解
Jul 21 PHP
PHP基于堆栈实现的高级计算器功能示例
Sep 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
简单易用的计数器(数据库)
2006/10/09 PHP
PHP5新特性: 更加面向对象化的PHP
2006/11/18 PHP
PHP 图片文件上传实现代码
2010/12/29 PHP
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
2020/04/05 PHP
PHP独立Session数据库存储操作类分享
2014/06/11 PHP
php实现的通用图片处理类
2015/03/24 PHP
用js自动判断浏览器分辨率的代码
2007/01/28 Javascript
jQuery getJSON 处理json数据的代码
2010/07/26 Javascript
JQuery扩展插件Validate—6 radio、checkbox、select的验证
2011/09/05 Javascript
理解JavaScript的prototype属性
2012/02/11 Javascript
JavaScript中三个等号和两个等号的区别(== 和 ===)浅析
2016/09/22 Javascript
jQuery Masonry瀑布流插件使用方法详解
2017/01/18 Javascript
JavaScript 中调用 Kotlin 方法实例详解
2017/06/09 Javascript
加载 vue 远程代码的组件实例详解
2017/11/20 Javascript
详细分析单线程JS执行问题
2017/11/22 Javascript
详解tween.js 中文使用指南
2018/01/05 Javascript
webpack将js打包后的map文件详解
2018/02/22 Javascript
为vue项目自动设置请求状态的配置方法
2019/06/09 Javascript
Vue+iview+webpack ie浏览器兼容简单处理
2019/09/20 Javascript
解决$store.getters调用不执行的问题
2019/11/08 Javascript
详解JavaScript中的Object.is()与&quot;===&quot;运算符总结
2020/06/17 Javascript
Python Mysql自动备份脚本
2008/07/14 Python
详解Python中的相对导入和绝对导入
2017/01/06 Python
Python实现分段线性插值
2018/12/17 Python
pyinstaller打包程序exe踩过的坑
2019/11/19 Python
python将四元数变换为旋转矩阵的实例
2019/12/04 Python
在python中计算ssim的方法(与Matlab结果一致)
2019/12/19 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
2020/06/04 Python
用CSS3实现瀑布流布局的示例代码
2017/11/10 HTML / CSS
html5 CSS过度-webkit-transition使用介绍
2013/07/02 HTML / CSS
Bogner美国官网:滑雪服中的”Dior”
2018/01/30 全球购物
什么是数组名
2012/05/10 面试题
餐厅楼面主管岗位职责范本
2014/02/16 职场文书
参观邀请函范文
2015/02/02 职场文书
2016小学新学期寄语
2015/12/04 职场文书
MySQL如何使备份得数据保持一致
2022/05/02 MySQL