JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它采用完全独立于编程语言的文本格式来存储和传输数据,本质是字符串。

服务器和客户机主要通过JSON格式来进行数据传输。

1. 当服务器需要输出数据时,我们可以使用json_encode()函数将PHP数据转为JSON字符串:

json_encode()函数的语法格式如下:

string json_encode(mixed $value, int $options = 0, int $depth = 512)

其中,$options指定JSON的编码方式,我们可以填写以下数字:

选项常量说明
JSON_HEX_TAG1将 < 和 > 转换为 \u003C 和 \u003E
JSON_HEX_AMP2将 & 转换为 \u0026
JSON_HEX_APOS4将 ' 转换为 \u0027
JSON_HEX_QUOT8将 " 转换为 \u0022
JSON_UNESCAPED_UNICODE256不转义中文等Unicode字符(最常用)
JSON_PRETTY_PRINT128格式化输出,便于阅读
JSON_UNESCAPED_SLASHES64不转义 /
JSON_NUMERIC_CHECK32将数字字符串转为数字
JSON_PRESERVE_ZERO_FRACTION1024保留浮点数的小数部分

第三个参数是JSON编码的最大嵌套深度,防止无限递归或者深度过大,默认值 512 足够应对 99% 的场景。

这里我们可以试着把一个数组打包成JSON:

<?php 
/* json_encode()函数 */
//1. 准备一个教程名字数组
$arr=['PHP','Java','C语言','算法竞赛','Linux命令'];
//2. 通过json_encode()函数对数组进行json打包
$jsonStr=json_encode($arr,128|256,512);
echo $jsonStr;//[ "PHP", "Java", "C语言", "算法竞赛", "Linux命令" ]
?>


2. 当服务器接受JSON数据时,我们就需要通过json_decode()函数对JSON数据进行解码:

json_decode()函数的语法格式如下:

mixed json_decode(string $json, bool $assoc = false, int $depth = 512, int $options = 0)

其中,第二个参数$assoc表示是将JSON转数组(true)还是对象(false),第三个参数$depth表示解码深度,第四个参数表示解码方式,解码方式有以下三个选项:

选项常量说明PHP版本
JSON_BIGINT_AS_STRING2将大整数转为字符串5.4+
JSON_OBJECT_AS_ARRAY1将对象转为数组5.4+
JSON_THROW_ON_ERROR4194304解码错误时抛出异常              7.3+
JSON_INVALID_UTF8_IGNORE1048576忽略无效UTF-8字符7.2+
JSON_INVALID_UTF8_SUBSTITUTE2097152替换无效UTF-8字符7.2+

比如这里我们试着为一个JSON字符串进行对象(默认是对象)解码:

<?php
// JSON 字符串
$jsonStr = '{"brand":"Dotcpp编程","website":"dotcpp.com"}';
// 解码为对象(默认)
$obj = json_decode($jsonStr);
echo $obj->brand . "<br>";          // 输出:Dotcpp编程
echo $obj->website . "<br>";        // 输出:dotcpp.com
?>


总结:PHP通过json_encode()将数据编码为JSON字符串用于输出或存储,通过json_decode()将JSON字符串解码为PHP数据结构进行处理。这是现代Web开发中进行前后端数据交换的核心技术。

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)