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中用文本文件做数据库的实现方法
Mar 27 PHP
PHP对字符串的递增运算分析
Aug 08 PHP
php知道与问问的采集插件代码
Oct 12 PHP
利用PHP生成静态HTML文档的原理
Oct 29 PHP
使用Smarty 获取当前日期时间和格式化日期时间的方法详解
Jun 18 PHP
zf框架db类的分页示例分享
Mar 14 PHP
ThinkPHP实例化模型的四种方法概述
Aug 22 PHP
网站防止被刷票的一些思路与方法
Jan 08 PHP
PHP aes (ecb)解密后乱码问题
Jun 22 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
Aug 12 PHP
PHP基于curl后台远程登录正方教务系统的方法
Oct 14 PHP
Linux系统下安装PHP7.3版本
Jun 26 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实现动态删除XML数据的方法示例
2018/03/30 PHP
基于jquery的气泡提示效果
2010/05/31 Javascript
jquery中dom操作和事件的实例学习-表单验证
2011/11/30 Javascript
来自国外的30个基于jquery的Web下拉菜单
2012/06/22 Javascript
Js注册协议倒计时的小例子
2013/06/24 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
JavaScript数组去重的两种方法推荐
2016/04/05 Javascript
浅谈javascript中的事件冒泡和事件捕获
2016/12/28 Javascript
使用node.js搭建服务器
2017/05/20 Javascript
JS 实现百度搜索功能
2018/02/01 Javascript
示例vue 的keep-alive缓存功能的实现
2018/12/13 Javascript
vue服务端渲染操作简单入门实例分析
2019/08/28 Javascript
谈谈node.js中的模块系统
2020/09/01 Javascript
[00:35]2016完美“圣”典风云人物:冷冷宣传片
2016/12/08 DOTA
[37:29]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第二场 11.19
2020/11/19 DOTA
python生成IP段的方法
2015/07/07 Python
用Python编写简单的微博爬虫
2016/03/04 Python
Python实现打印螺旋矩阵功能的方法
2017/11/21 Python
Python实现PS滤镜的旋转模糊功能示例
2018/01/20 Python
python绘制多个曲线的折线图
2020/03/23 Python
python读取文件名并改名字的实例
2019/01/07 Python
梅尔频率倒谱系数(mfcc)及Python实现
2019/06/18 Python
python的常见矩阵运算(小结)
2019/08/07 Python
Python3 sys.argv[ ]用法详解
2019/10/24 Python
python 和c++实现旋转矩阵到欧拉角的变换方式
2019/12/04 Python
python编写微信公众号首图思路详解
2019/12/13 Python
BCBG官网:BCBGMAXAZRIA
2017/12/29 全球购物
英国大码女性时装零售商:Evans
2018/08/29 全球购物
在印度上传处方,在线订购药品:Medlife
2019/03/28 全球购物
协议书样本
2014/04/23 职场文书
超市店庆活动方案
2014/08/31 职场文书
学习十八大的心得体会
2014/09/01 职场文书
党的群众路线对照检查材料(个人)
2014/09/24 职场文书
同学聚会邀请函
2015/01/30 职场文书
九年级化学教学反思
2016/02/22 职场文书
Django+Celery实现定时任务的示例
2021/06/23 Python