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 相关文章推荐
Discuz! Passport 通行证整合
Mar 27 PHP
PHP开发中常用的三个表单验证函数使用小结
Mar 03 PHP
PHP原理之异常机制深入分析
Aug 08 PHP
基于python发送邮件的乱码问题的解决办法
Apr 25 PHP
解析php中反射的应用
Jun 18 PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
Jul 25 PHP
Yii框架表单模型和验证用法
May 20 PHP
PHP实现的登录,注册及密码修改功能分析
Nov 25 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
Feb 19 PHP
解决laravel session失效的问题
Oct 14 PHP
YII2框架中behavior行为的理解与使用方法示例
Mar 13 PHP
thinkphp框架表单数组实现图片批量上传功能示例
Apr 04 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 FLEA中二叉树数组的遍历输出
2012/09/26 PHP
php向js函数传参的几种方法
2014/08/10 PHP
PHP获取音频文件的相关信息
2015/06/22 PHP
JavaScript中void(0)的具体含义解释
2007/02/27 Javascript
nodeJS代码实现计算交社保是否合适
2015/03/09 NodeJs
Javascript编写2048小游戏
2015/07/07 Javascript
JavaScript实现快速排序的方法
2015/07/31 Javascript
jQuery实现带渐显效果的人物多级关系图代码
2015/10/16 Javascript
javascript禁止超链接跳转的方法
2016/02/02 Javascript
jquery html动态添加的元素绑定事件详解
2016/05/24 Javascript
js记录点击某个按钮的次数-刷新次数为初始状态的实例
2017/02/15 Javascript
vue 使用eventBus实现同级组件的通讯
2018/03/02 Javascript
javascript中一些奇葩的日期换算方法总结
2018/11/14 Javascript
百度小程序自定义通用toast组件
2019/07/17 Javascript
浅谈Layui的eleTree树式选择器使用方法
2019/09/25 Javascript
[01:01]2020完美高校联赛(秋)西安落幕
2021/03/11 DOTA
Python实现统计给定列表中指定数字出现次数的方法
2018/04/11 Python
Python实现的简单计算器功能详解
2018/08/25 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
Python实现Word表格转成Excel表格的示例代码
2020/04/16 Python
Python 在局部变量域中执行代码
2020/08/07 Python
处理textarea中的换行和空格
2019/12/12 HTML / CSS
清除canvas画布内容(点擦除+线擦除)
2020/08/12 HTML / CSS
挪威户外活动服装和装备购物网站:Bergfreunde挪威
2016/10/20 全球购物
意大利火车票和铁路通行证专家:ItaliaRail
2019/01/22 全球购物
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
2012/05/30 面试题
计算机专业应届毕业生自荐信
2013/09/26 职场文书
四川成都导游欢迎词
2014/01/18 职场文书
原料仓管员岗位职责
2014/04/12 职场文书
拉拉队口号
2014/06/16 职场文书
常务副县长“四风”个人对照检查材料思想汇报
2014/10/02 职场文书
2014流动人口计划生育工作总结
2014/12/20 职场文书
风雨哈佛路观后感
2015/06/03 职场文书
沂蒙六姐妹观后感
2015/06/08 职场文书
教师理论学习心得体会
2016/01/21 职场文书
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/04/22 无线电