什么是 JSON ?
· JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
· JSON 是轻量级的文本数据交换格式
· JSON 独立于语言 *
· JSON 具有自我描述性,更易理解
* JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。
环境配置
在 php5.2.0 及以上版本已经内置 JSON 扩展。
JSON 函数
函数 | 描述 |
json_encode | 对变量进行 JSON 编码 |
json_decode | 对 JSON 格式的字符串进行解码,转换为 PHP 变量 |
json_last_error | 返回最后发生的错误 |
json_encode
json_encode() 用于对变量进行 JSON 编码,该函数如果执行成功返回 JSON 数据,否则返回 FALSE 。
语法
json_encode ($value,[,options = 0 ] )
参数
· value: 要编码的值。该函数只对 UTF-8 编码的数据有效。
· options:由以下常量组成的二进制掩码:JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK,JSON_PRETTY_PRINT,
JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT
· 由于json只接受utf-8编码的字符,所以json_encode()的参数必须是utf-8编码,否则会得到空字符或者null。当中文使用GB2312编码,或者外文使用ISO-8859-1编码的时
候,这一点要特别注意。
实例
以下实例演示了如何将 PHP 数组转换为 JSON 格式数据:
<?php $arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5); echo json_encode($arr); ?>
程序运行结果:
{"a":1,"b":2,"c":3,"d":4,"e":5}
以下实例演示了如何将 PHP 对象转换为JSON 格式数据
<?php class Emp { public $name = ""; public $hobbies = ""; public $birthdate = ""; } $e = new Emp(); $e->name = "sachin"; $e->hobbies = "sports"; $e->birthdate = date('Y-m-d h:i:s a', "2016/9/19 12:20:03 p"); $e->birthdate = date('Y-m-d h:i:s a', strtotime("2016/9/19 12:20:03")); echo json_encode($e); ?>
程序运行结果:
{"name":"sachin","hobbies":"sports","birthdate":"2016-09-19 12:20:03 pm"} $json [,$assoc = false [, $depth = 512 [, $options = 0 ]]]
json_decode
json_decode() 函数用于对 JSON 格式的字符串进行解码,并转换为 PHP 变量。
语法
json_decode ($json [,$assoc = false [, $depth = 512 [, $options = 0 ]]])
参数
· json_string: 待解码的 JSON 字符串,必须是 UTF-8 编码数据
· assoc: 当该参数为 TRUE 时,将返回数组,FALSE 时返回对象。
· depth: 整数类型的参数,它指定递归深度
· options: 二进制掩码,目前只支持 JSON_BIGINT_AS_STRING 。
json_decode()的常见错误
下面三种json写法都是错的,你能看出错在哪里吗?
$bad_json = "{ 'bar': 'baz' }";
$bad_json = '{ bar: "baz" }';$bad_json = '{ "bar": "baz", }';
对这三个字符串执行json_decode()都将返回null,并且报错。
第一个的错误是,json的分隔符(delimiter)只允许使用双引号,不能使用单引号。
第二个的错误是,json名值对的"名"(冒号左边的部分),任何情况下都必须使用双引号。
第三个的错误是,最后一个值之后不能添加逗号(trailing comma)。
另外,json只能用来表示对象(object)和数组(array),如果对一个字符串或数值使用json_decode(),将会返回null。
实例
以下实例演示了如何解码 JSON 数据:
<?php $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; var_dump(json_decode($json)); var_dump(json_decode($json, true)); ?>
程序运行结果:
object(stdClass)#1 (5) { ["a"]=> int(1) ["b"]=> int(2) ["c"]=> int(3) ["d"]=> int(4) ["e"]=> int(5)}array(5) { ["a"]=> int(1) ["b"]=> int(2) ["c"]=> int(3) ["d"]=> int(4) ["e"]=> int(5)}