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
main.php
Dec 09 PHP
PHP PDO函数库详解
Apr 27 PHP
php中字符集转换iconv函数使用总结
Oct 11 PHP
PHP操作MySQL事务实例
Nov 05 PHP
php5.3不能连接mssql数据库的解决方法
Dec 27 PHP
Thinkphp中的curd应用实用要点
Jan 04 PHP
PHP实现在线阅读PDF文件的方法
Jun 23 PHP
PHP使用PDO操作数据库的乱码问题解决方法
Apr 08 PHP
PHP中类的自动加载的方法
Mar 17 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
Sep 13 PHP
PHP获取链表中倒数第K个节点的方法
Jan 18 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下载xls文件(自己动手写的)
2014/04/18 PHP
PHP文件上传之多文件上传的实现思路
2016/01/27 PHP
Yii2框架实现注册和登录教程
2016/09/30 PHP
Laravel框架源码解析之模型Model原理与用法解析
2020/05/14 PHP
JavaScript中“过于”犀利地for/in循环使用示例
2013/10/22 Javascript
javascritp添加url参数将参数加入到url中
2014/09/25 Javascript
jQuery实现的仿select功能代码
2015/08/19 Javascript
JavaScript仿flash遮罩动画效果
2016/06/15 Javascript
jQuery中deferred对象使用方法详解
2016/07/14 Javascript
JavaScript探测CSS动画是否已经完成的方法
2016/08/30 Javascript
AngularJS实践之使用ng-repeat中$index的注意点
2016/12/22 Javascript
jquery.uploadView 实现图片预览上传功能
2017/08/10 jQuery
JS使用正则表达式找出最长连续子串长度
2017/10/26 Javascript
webpack vue项目开发环境局域网访问方法
2018/03/20 Javascript
浅谈vuepress 踩坑记
2018/04/18 Javascript
JS实现图片转换成base64的各种应用场景实例分析
2018/06/22 Javascript
vue 中基于html5 drag drap的拖放效果案例分析
2018/11/01 Javascript
vue中img src 动态加载本地json的图片路径写法
2019/04/25 Javascript
vue2 v-model/v-text 中使用过滤器的方法示例
2019/05/09 Javascript
vue中datepicker的使用教程实例代码详解
2019/07/08 Javascript
深入分析jQuery.one() 函数
2020/06/03 jQuery
基于Django的ModelForm组件(详解)
2017/12/07 Python
Python实现病毒仿真器的方法示例(附demo)
2020/02/19 Python
python递归函数求n的阶乘,优缺点及递归次数设置方式
2020/04/02 Python
pytorch快速搭建神经网络_Sequential操作
2020/06/17 Python
锐步香港官方网上商店:Reebok香港
2020/11/05 全球购物
linux比较文件内容的命令是什么
2015/09/23 面试题
机械电子工程专业推荐信范文
2013/11/20 职场文书
元旦文艺汇演主持词
2014/03/26 职场文书
服装发布会策划方案
2014/05/22 职场文书
新文化运动的基本口号
2014/06/21 职场文书
小学课外阅读总结
2014/07/09 职场文书
大学同学会活动方案
2014/08/20 职场文书
自我检讨书范文
2015/01/28 职场文书
《比的意义》教学反思
2016/02/18 职场文书
Go并发4种方法简明讲解
2022/04/06 Golang