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 相关文章推荐
Email+URL的判断和自动转换函数
Oct 09 PHP
回答PHPCHINA上的几个问题:URL映射
Feb 14 PHP
php dirname(__FILE__) 获取当前文件的绝对路径
Jun 28 PHP
php empty() 检查一个变量是否为空
Nov 10 PHP
mongo Table类文件 获取MongoCursor(游标)的实现方法分析
Jul 01 PHP
初识php MVC
Sep 10 PHP
PHP实现定时执行任务的方法
Oct 05 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
Oct 13 PHP
PHP自定义函数判断是否为Get、Post及Ajax提交的方法
Jul 27 PHP
PHP中十六进制颜色与RGB颜色值互转的方法
Mar 18 PHP
php实现 master-worker 守护多进程模式的实例代码
Jul 20 PHP
Laravel5.1框架路由分组用法实例分析
Jan 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作的文本留言本的例子(一)
2006/10/09 PHP
检测png图片是否完整的php代码
2010/09/06 PHP
PHP编码规范的深入探讨
2013/06/06 PHP
php的dl函数用法实例
2014/11/06 PHP
PHP中file_exists()判断中文文件名无效的解决方法
2014/11/12 PHP
变量在 PHP7 内部的实现(二)
2015/12/21 PHP
PHP实现对xml的增删改查操作案例分析
2017/05/19 PHP
PHP中OpenSSL加密问题整理
2017/12/14 PHP
php从数据库中获取数据用ajax传送到前台的方法
2018/08/20 PHP
prototype.js的Ajax对象
2006/09/23 Javascript
一个多次搜索+多次传值的解决方案
2007/01/20 Javascript
ppk谈JavaScript style属性
2008/10/10 Javascript
深入分析js中的constructor和prototype
2012/04/07 Javascript
JS中处理与当前时间间隔的函数代码
2012/05/23 Javascript
缓动函数requestAnimationFrame 更好的实现浏览器经动画
2012/12/07 Javascript
jquery中的事件处理详细介绍
2013/06/24 Javascript
JavaScript加强之自定义event事件
2013/09/21 Javascript
php is_numberic函数造成的SQL注入漏洞
2014/03/10 Javascript
基于jQuery的图片不完全按比例自动缩小
2014/07/11 Javascript
JavaScript开发人员的10个关键习惯小结
2014/12/05 Javascript
实例解析jQuery中proxy()函数的用法
2016/05/24 Javascript
layui实现动态和静态分页
2018/04/28 Javascript
webstorm中配置nodejs环境及npm的实例
2018/05/15 NodeJs
微信小程序之事件交互操作实例分析
2018/12/03 Javascript
vue实现文件上传读取及下载功能
2020/11/17 Javascript
Python ftp上传文件
2016/02/13 Python
解决python3在anaconda下安装caffe失败的问题
2017/06/15 Python
对python中的pop函数和append函数详解
2018/05/04 Python
Python定义二叉树及4种遍历方法实例详解
2018/07/05 Python
会走动的图形html5时钟示例
2014/04/27 HTML / CSS
使用phonegap播放音频的实现方法
2017/03/31 HTML / CSS
参观接待方案
2014/03/17 职场文书
2014年政府采购工作总结
2014/12/09 职场文书
幼儿园2015年度工作总结
2015/04/01 职场文书
python 自动刷新网页的两种方法
2021/04/20 Python