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 相关文章推荐
屏蔽浏览器缓存另类方法
Oct 09 PHP
开发大型 PHP 项目的方法
Jan 02 PHP
PHP HTML代码串截取代码
Dec 29 PHP
PHP中利用substr_replace将指定两位置之间的字符替换为*号
Jan 27 PHP
wordpress自定义url参数实现路由功能的代码示例
Nov 28 PHP
php读取目录所有文件信息dir示例
Mar 18 PHP
thinkphp中session和cookie无效的解决方法
Dec 19 PHP
php+ajax实现无刷新的新闻留言系统
Dec 21 PHP
ThinkPHP和UCenter接口冲突的解决方法
Jul 25 PHP
mac系统下为 php 添加 pcntl 扩展
Aug 28 PHP
php curl发送请求实例方法
Aug 01 PHP
laravel框架使用阿里云短信发送消息操作示例
Feb 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
php防注
2007/01/15 PHP
请php正则走开
2008/03/15 PHP
Laravel 4 初级教程之视图、命名空间、路由
2014/10/30 PHP
php制作简单模版引擎
2016/04/07 PHP
PHP框架自动加载类文件原理详解
2017/06/06 PHP
PHP PDOStatement::fetch讲解
2019/01/31 PHP
laravel5.6中的外键约束示例
2019/10/23 PHP
用javascript连接access数据库的方法
2006/11/17 Javascript
ajax 缓存 问题 requestheader
2010/08/01 Javascript
javascript递归回溯法解八皇后问题
2015/04/22 Javascript
JS查找英文文章中出现频率最高的单词
2017/03/20 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
2017/03/25 Javascript
详解基于Angular4+ server render(服务端渲染)开发教程
2017/08/28 Javascript
浅谈在Vue-cli里基于axios封装复用请求
2017/11/06 Javascript
Vue2.0子同级组件之间数据交互方法
2018/02/28 Javascript
jQuery实现ajax回调函数带入参数的方法示例
2018/06/26 jQuery
小程序实现选择题选择效果
2018/11/04 Javascript
javascript中数组的常用算法深入分析
2019/03/12 Javascript
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
关于vue2强制刷新,解决页面不会重新渲染的问题
2019/10/29 Javascript
webstorm建立vue-cli脚手架的傻瓜式教程
2020/09/22 Javascript
跟老齐学Python之画圈还不简单吗?
2014/09/20 Python
Python实现简单HTML表格解析的方法
2015/06/15 Python
python NumPy ndarray二维数组 按照行列求平均实例
2019/11/26 Python
python使用rsa非对称加密过程解析
2019/12/28 Python
如何把外网python虚拟环境迁移到内网
2020/05/18 Python
Python操作Elasticsearch处理timeout超时
2020/07/17 Python
Belvilla法国:休闲度假房屋出租
2020/10/03 全球购物
Java面试中常遇到的问题,也是需要注意的几点
2013/08/30 面试题
行政助理的职责
2013/11/14 职场文书
卖房协议书样本
2014/10/30 职场文书
2014年审计工作总结
2014/11/17 职场文书
2014年民警工作总结
2014/11/25 职场文书
考试作弊检讨
2015/01/27 职场文书
提档介绍信范文
2015/10/22 职场文书
Python语言中的数据类型-序列
2022/02/24 Python