文章目录

  • PHP JSON的解析和创建
  • json_encode()
  • json_decode()

PHP JSON的解析和创建

JSON(全称“JavaScript Object Notation”)是一种轻量级的数据交换格式,易于读写,广泛应用于 Web 开发领域。本节我们来介绍一下在 PHP 中如何创建和解析 JSON 数据。

PHP 中提供了 json_encode() 和 json_decode() 两个函数分别创建和解析 JSON 数据,其中:

  • json_encode():可以将变量转换为 JSON 格式;
  • json_decode():可以对 JSON 格式的字符串进行解析。

json_encode()

json_encode() 函数能够将一个 PHP 变量转换为 JSON 数据,其语法格式如下:

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

参数说明如下:

  • $value:要转换的变量,变量可以是任意数据类型;
  • $options:可选参数,默认值为 0,可选值为以下 PHP 常量: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。关于这些常量了解即可,一般不怎么使用,它们的具体含义您可以通过 JSON 常量查阅;
  • $depth:可选参数,用来设置递归的最大深度,它的值必须大于 0,默认值为 512,同 $options 参数一样,该参数同样不怎么使用。

若转换成功,json_encode() 函数会返回字符串类型的转换结果,若转换失败,则返回 false。

【示例】使用 json_encode() 函数将 PHP 变量转换为 JSON 格式:

<?php$arr = ["title"     => "JSON教程","author"    => "C语言中文网","url"       => "http://c.biancheng.net/","catalogue" => ["JSON是什么?","JSONP是什么?","JSON语法规则"]];echo json_encode($arr);
?>

运行结果如下:

{“title”:“JSON\u6559\u7a0b”,“author”:“C\u8bed\u8a00\u4e2d\u6587\u7f51”,“url”:“http://c.biancheng.net/”,“catalogue”:[“JSON\u662f\u4ec0\u4e48\uff1f”,“JSONP\u662f\u4ec0\u4e48\uff1f”,“JSON\u8bed\u6cd5\u89c4\u5219”]}

通过运行结果可以看出,在使用 json_encode() 函数将变量转换为 JSON 数据时,会将变量中的中文字符编码为 Unicode 字符(\uXXXX 格式的字符),如果不需要这样的转换,将 json_encode() 函数的第二个参数设置为 JSON_UNESCAPED_UNICODE 即可,如下例所示:

<?php$arr = ["title"     => "JSON教程","author"    => "C语言中文网","url"       => "http://c.biancheng.net/","catalogue" => ["JSON是什么?","JSONP是什么?","JSON语法规则"]];echo json_encode($arr,JSON_UNESCAPED_UNICODE );
?>

运行结果如下:

{“title”:“JSON教程”,“author”:“C语言中文网”,“url”:“http://c.biancheng.net/”,“catalogue”:[“JSON是什么?”,“JSONP是什么?”,“JSON语法规则”]}

json_decode()

json_decode() 函数能够解析 JSON 格式的字符串,并将解析后的结果保存到一个变量中,其语法格式如下:

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

参数说明如下:

  • $json:必填参数,要解析的 JSON 字符串;
  • $assoc:可选参数,默认值为 false,若将值设置为 true,那么 json_decode() 函数将返回一个数组;
  • $depth:可选参数,用来设置递归的最大深度,默认值为 512,也可以设置为其它大于 0 的值;
  • $options:可选参数,默认值为 0,可选值为 JSON_BIGINT_AS_STRING、JSON_INVALID_UTF8_IGNORE、JSON_INVALID_UTF8_SUBSTITUTE、JSON_OBJECT_AS_ARRAY、JSON_THROW_ON_ERROR 等常量,可以同时设置多个常量,常量之间使用竖线 | 进行分隔。有关上述常量的含义,您可以通过 PHP 预定义常量查阅。

若解析成功,json_decode() 函数会返回 JSON 中的数据,若解析失败,或者 JSON 的数据深度超过了递归的限制,则返回 null。

【示例】使用 json_decode() 函数解析 JSON 数据:

<?php$str = '{"title":"JSON教程","author":"C语言中文网","url":"http:\/\/c.biancheng.net\/","catalogue":["JSON是什么?","JSONP是什么?","JSON语法规则"]}';echo "<pre>";var_dump(json_decode($str, true));
?>

运行结果如下:

array(4) {["title"]=>string(10) "JSON教程"["author"]=>string(16) "C语言中文网"["url"]=>string(23) "http://c.biancheng.net/"["catalogue"]=>array(3) {[0]=>string(16) "JSON是什么?"[1]=>string(17) "JSONP是什么?"[2]=>string(16) "JSON语法规则"}
}

PHP JSON的解析和创建相关推荐

  1. Json的解析和创建

    using UnityEngine; using System.Collections; using System.Json; using System; /// <summary> // ...

  2. 29-30Python多线程、多线程、使用threading模块创建线程;JSON数据解析、编码为JSON类型转换对应表、Python类型转换对应表、json.dumps与json.loads

    29Python3多线程 多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,比如用户点击了一个按钮去触发某些 ...

  3. 【Unity3D读取数据】(二)Json文件操作(创建、读取、解析、修改)

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有 ...

  4. Json文件解析(下

    Json文件解析(下) 代码地址:https://github.com/nlohmann/json 从STL容器转换 任何序列容器(std::array,std::vector,std::deque, ...

  5. Json文件解析(上)

    Json文件解析(上) 代码地址:https://github.com/nlohmann/json 自述文件 alt=GitHub赞助商 data-canonical-src="https: ...

  6. Android JSON数据解析(GSON方式)

    要创建和解析JSON数据,也可以使用GSON来完成.GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库.使用GSON,可以很容易的将一串JSON数据转换为一个Jav ...

  7. JSON数据解析及gson.jar包

    从服务器端接收数据的时候,那些数据必须以浏览器能够理解的格式来发送. 服务器端的编程语言只能以如下 3 种格式返回数据: HTML XML JSON JSON一种简单的数据格式,比xml更轻巧. JS ...

  8. json数据解析_「Flutter实战」22.JSON解析和复杂数据模型转换

    22.JSON解析和复杂数据模型转换技巧 json转Model类 创建model文件夹,在里面新建category.dart类 主要根据这个json来分析我们要做成类的样子 json数据 class ...

  9. SwiftUI之深入解析如何创建列表展示视图和列表如何导航跳转新页面

    一.前言 地标详情页视图已经创建完成,我们需要提供一种方式让用户可以查看完整的地标列表,并且可以查看每一个地标的详情.地标详情页视图的创建,请参考我的博客:SwiftUI之深入解析如何创建和组合视图. ...

最新文章

  1. 《OpenCV3编程入门》学习笔记10 角点检测(一)Harris角点检测
  2. torch.nn.Embedding()理解
  3. 关于接口测试,我们要测什么,怎么上手
  4. mysql安装start service错误_为什么安装mysql会出现start service错误
  5. Fedora 15 安装 HP 打印机
  6. 动态添加内容到百度搜索框里
  7. gRPC-rs:从 C 到 Rust 1
  8. 第十五节: EF的CodeFirst模式通过DataAnnotations修改默认协定
  9. php无限极,PHP无限极分类
  10. HTTP和WebSocket协议(二)
  11. 基于源码剖析nodejs模块系统
  12. Java==与equals方法的区别
  13. 【数学建模】基于matlab GUI弱肉强食问题—Volterra 模型【含Matlab源码 1502期】
  14. 云桌面优缺点_云桌面真的是办公最佳选择吗?云桌面的优缺点对比
  15. Lora网关节点汇聚传感器数据
  16. 1.checkpoint防火墙安装以及高可靠性配置
  17. 三村合建水厂问题研究 (代码)
  18. 解决Substrate节点模板编译失败ailed to run custom build command for `tikv-jemalloc-sys v0.4.3+5.2.1-patched.2`
  19. Python实现草莓熊手拿风车和鲜花
  20. [转载] 晓说——第29期:海上霸主航母(上)

热门文章

  1. 回首过去,感慨不已!
  2. 假期无聊,我又发现一个刷题神器
  3. 本科以下请注意!在职低学历直升本科!免试入学,无需到校,灵活在岗就读,名额有限,速看!...
  4. 早起比晚睡更可怕...
  5. Springboot毕设项目风云网吧管理系统57g27(java+VUE+Mybatis+Maven+Mysql)
  6. STM32芯片型号的命名解读
  7. fastjson判断一个json是jsonArray还是jsonObject几种方式
  8. CollectionUtils属于哪个包
  9. chacha20算法,适用于单片机
  10. Echarts Y轴单位自动转换