本篇文章给大家带来的内容是关于php中json_decode函数使用方法的而详细介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
我们都知道使用 json_decode 函数可以用来对 JSON 格式的字符串进行解码。我们常用的形式如下:
<?php $json = 'some_json_data';$result = json_decode($json, true);
实际上 json_decode() 函数拥有多个参数,根据传入的参数的不同,函数的行为也将不同。
解码的数据
你可能见到过 json_decode() 函数报下面的错误:
立即学习“PHP免费学习笔记(深入)”;
Warning: json_decode() expects parameter 1 to be string, xxx given in
根据报错信息来看,第一个参数必须为 string 类型,但是,实际上第一个参数可以是下面的三种类型:
string
null
bool
根据参数的类型的不同,函数的返回值也将发生变化。
返回值
json_decode() 函数默认在解析 JSON 数据正确地情况下会返回一个对象。
但是第二个参数传入 true 后或者第四个参数传入 JSON_OBJECT_AS_ARRAY 后,函数将在解析 JSON 数据正确地情况下返回数组而不是对象。
请注意我加黑的文字,json_decode() 函数在解析 JSON 数据正确地情况下返回对象或者数组,但是一些情况下函数将返回其它数据:
string 类型并且是正确的 JSON 格式的数据,解码后返回对象或数组
从 PHP 5.6 开始,JSON 数据中存在 true,false 和 null,如果不采用小写格式,将会解码失败,返回 null
string 类型的 'true'、'false'、'null' 返回其本身(全部为小写情况下)
其它的 string 类型的参数返回 null
true / false / null 直接返回 null
其它类型的数据直接报错
第三个参数递归深度为 1 的时候,直接返回 null
所以我们在使用 foreach 对解码后的数据进行迭代时,需要留意解码后的数据是否为数组,如果不是,那么在迭代时会报错。
可以去 JSON 官方网站去了解什么样的数据才是 JSON 格式的数据,
递归深度
第三个参数表示递归深度,深度必须大于 0,否则报错。当递归深度为 1 时结果为 null,所以递归深度最小值为 2。
解码选项
第四个参数用于设置选项:
JSON_PRETTY_PRINT 会填充一些空白字符进去,方便查看
JSON_UNESCAPED_SLASHES 不要编码 /
JSON_UNESCAPED_UNICODE 不要编码 unicode 字符, 默认是编码成 \uXXXX
处理错误
我们也可以结合 json_last_error 函数、json_last_error_msg(PHP >= 5.5) 函数与 @ 操作符一起使用:
<?php $json = 'some_json_data';$result = @json_decode((string)$json, true);if (json_last_error() !== JSON_ERROR_NONE) { throw new Exception(json_last_error_msg());}