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初学者头痛的十四个问题
Jul 12 PHP
PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
Oct 11 PHP
配置php网页显示各种语法错误
Sep 23 PHP
win7计划任务定时执行PHP脚本设置图解
May 09 PHP
PHP7.0安装笔记整理
Aug 28 PHP
最新制作ThinkPHP3.2.3完全开发手册
Nov 23 PHP
服务器迁移php版本不同可能诱发的问题
Dec 22 PHP
php版交通银行网银支付接口开发入门教程
Sep 26 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 PHP
php连接MSsql server的五种方法总结
Mar 04 PHP
PHP设计模式概论【概念、分类、原则等】
May 01 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
May 25 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
DC的38部超级英雄动画电影
2020/03/03 欧美动漫
Linux编译升级php的详细方法
2013/11/04 PHP
php防止SQL注入详解及防范
2013/11/12 PHP
PHP魔术引号所带来的安全问题分析
2014/07/15 PHP
PHP stream_context_create()函数的使用示例
2015/05/12 PHP
jquery 多行滚动代码(附详细解释)
2010/06/17 Javascript
基于jQuery的投票系统显示结果插件
2011/08/12 Javascript
鼠标拖动实现DIV排序示例代码
2013/10/14 Javascript
在页面上用action传递参数到后台出现乱码的解决方法
2013/12/31 Javascript
JS设置获取cookies的方法
2014/01/26 Javascript
动态加载js、css等文件跨iframe实现
2014/02/24 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
2016/03/05 Javascript
JavaScript中setter和getter方法介绍
2016/07/11 Javascript
图解prototype、proto和constructor的三角关系
2016/07/31 Javascript
easyui combogrid实现本地模糊搜索过滤多列
2017/05/13 Javascript
vue2实现可复用的轮播图carousel组件详解
2017/11/27 Javascript
React router动态加载组件之适配器模式的应用详解
2018/09/12 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
2018/09/14 Javascript
JavaScript中关于base64的一些事
2019/05/06 Javascript
Python的批量远程管理和部署工具Fabric用法实例
2015/01/23 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
2016/11/16 Python
利用Tkinter(python3.6)实现一个简单计算器
2017/12/21 Python
python操作oracle的完整教程分享
2018/01/30 Python
Django中的ajax请求
2018/10/19 Python
用scikit-learn和pandas学习线性回归的方法
2019/06/21 Python
python+selenium 点击单选框-radio的实现方法
2019/09/03 Python
python 统计文件中的字符串数目示例
2019/12/24 Python
应届生个人求职信模板
2013/11/26 职场文书
学习十八大报告感言
2014/02/04 职场文书
社区母亲节活动记录
2014/03/06 职场文书
2014两会学习心得:榜样精神伴我行
2014/03/17 职场文书
正风肃纪剖析材料范文
2014/10/10 职场文书
学校清洁工岗位职责
2015/04/15 职场文书
志愿者工作心得体会
2016/01/15 职场文书
CSS3实现三角形不断放大效果
2021/04/13 HTML / CSS
原生JavaScript实现简单五子棋游戏
2021/06/28 Javascript