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 CLI模式下的多进程应用分析
Jun 03 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
Sep 16 PHP
php对文件进行hash运算的方法
Apr 03 PHP
PHP获取远程图片并保存到本地的方法
May 12 PHP
Yii2 GridView实现列表页直接修改数据的方法
May 16 PHP
CI框架常用方法小结
May 17 PHP
PHP实现数组array转换成xml的方法
Jul 19 PHP
php Session无效分析资料整理
Nov 29 PHP
php 删除一维数组中某一个值元素的操作方法
Feb 01 PHP
php集成开发环境详解
Sep 24 PHP
PHP数组访问常用方法解析
Sep 05 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
java EJB 加密与解密原理的一个例子
2008/01/11 PHP
php入门学习知识点一 PHP与MYSql连接与查询
2011/07/14 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(八)
2014/06/23 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
2016/03/21 PHP
Laravel 错误提示本地化的实现
2019/10/22 PHP
一些常用的JS功能函数(2009-06-04更新)
2009/06/04 Javascript
js(JavaScript)实现TAB标签切换效果的简单实例
2014/02/26 Javascript
基于BootStrap Metronic开发框架经验小结【四】Bootstrap图标的提取和利用
2016/05/12 Javascript
jquery获取点击控件的绝对位置简单实例
2016/10/13 Javascript
Vue计算属性的学习笔记
2017/03/22 Javascript
JavaScript上传文件时不用刷新页面方法总结(推荐)
2017/08/15 Javascript
基于nodejs实现微信支付功能
2017/12/20 NodeJs
vue-star评星组件开发实例
2018/03/01 Javascript
vue如何在自定义组件中使用v-model
2018/05/14 Javascript
解决angularjs前后端分离调用接口传递中文时中文乱码的问题
2018/08/13 Javascript
Flutter部件内部状态管理小结之实现Vue的v-model功能
2019/06/11 Javascript
[09:37]DOTA2卡尔工作室 英雄介绍圣堂刺客篇
2013/06/13 DOTA
Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
2014/06/10 Python
解析Python编程中的包结构
2015/10/25 Python
详解python 发送邮件实例代码
2016/12/22 Python
Python基于matplotlib绘制栈式直方图的方法示例
2017/08/09 Python
Python中顺序表的实现简单代码分享
2018/01/09 Python
Python爬虫爬取一个网页上的图片地址实例代码
2018/01/16 Python
Python2.7 实现引入自己写的类方法
2018/04/29 Python
python 机器学习之支持向量机非线性回归SVR模型
2019/06/26 Python
python网络爬虫 Scrapy中selenium用法详解
2019/09/28 Python
python psutil监控进程实例
2019/12/17 Python
python绘制玫瑰的实现代码
2020/03/02 Python
创建青年文明号材料
2014/05/09 职场文书
妇女干部培训方案
2014/05/12 职场文书
环保建议书100字
2014/05/14 职场文书
庆六一宣传标语
2014/10/08 职场文书
乡镇党的群众路线教育实践活动总结报告
2014/10/30 职场文书
营业员岗位职责范本
2015/04/14 职场文书
优秀大学生申请书
2019/06/24 职场文书
Python爬虫基础之初次使用scrapy爬虫实例
2021/06/26 Python