PHP json_encode函数的参数说明

一、总结

一句话总结:

· json_encode常常被用于将数组转换成json格式的字符串来表示,但是json_encode的第一个参数却并不一定是数组格式,第一个参数可以为对象,数组,字符串。
· object和array类型转换为json字符串之后没有差别,而string被json_encode之后,string中的【'】,【"】,【\】,【/】会被转义。

1、json_encode第二个参数稍微常见例子?

JSON_UNESCAPED_UNICODE (integer) 以字面编码多字节 Unicode 字符(默认是编码成 \uXXXX)。 自 PHP 5.4.0 起生效。

JSON_HEX_TAG (integer) 所有的 < 和 > 转换成 \u003C 和 \u003E。 自 PHP 5.3.0 起生效。

JSON_HEX_AMP (integer) 所有的 & 转换成 \u0026。 自 PHP 5.3.0 起生效。

JSON_HEX_APOS (integer) 所有的 ' 转换成 \u0027。 自 PHP 5.3.0 起生效。

JSON_HEX_QUOT (integer) 所有的 " 转换成 \u0022。 自 PHP 5.3.0 起生效。

JSON_FORCE_OBJECT (integer) 使一个非关联数组输出一个类(Object)而非数组。 在数组为空而接受者需要一个类(Object)的时候尤其有用。 自 PHP 5.3.0 起生效。

JSON_NUMERIC_CHECK (integer) 将所有数字字符串编码成数字(numbers)。 自 PHP 5.3.3 起生效。

JSON_BIGINT_AS_STRING (integer) 将大数字编码成原始字符原来的值。 自 PHP 5.4.0 起生效。

JSON_PRETTY_PRINT (integer) 用空白字符格式化返回的数据。 自 PHP 5.4.0 起生效。

JSON_UNESCAPED_SLASHES (integer) 不要编码 /。 自 PHP 5.4.0 起生效。

JSON_UNESCAPED_UNICODE (integer) 以字面编码多字节 Unicode 字符(默认是编码成 \uXXXX)。 自 PHP 5.4.0 起生效。

二、PHP json_encode函数的参数说明

转自或参考:PHP json_encode函数的参数说明
https://blog.csdn.net/it_r00t/article/details/83993809

今天主要看了一下json_encode函数的参数以及使用,以下主要是对json_encode第2/3个参数的一些自己认为的解析。

首先看一下php.net中关于json_encode的说明:

Description

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

Returns a string containing the JSON representation of the supplied value // 返回json格式的字符串

The encoding is affected by the supplied options and additionally the encoding of float values depends on the value ofserialize_precision. // 所返回json格式的字符串取决于第二个参数

一: json_encode常常被用于将数组转换成json格式的字符串来表示,但是json_encode的第一个参数却并不一定是数组格式,第一个参数可以为对象,数组,字符串。


$array = [
'a' => 'he',
'b' => 'llo',
'c' => 'world',
'd' => [
1 => 'a',
2 => 'b',
3 => 'c'
]
];
// 参数为普通数组 string(62) "{"a":"he","b":"llo","c":"world","d":{"1":"a","2":"b","3":"c"}}"
var_dump(json_encode($array)); // 将数组先转为json格式字符串,再使用json_decode转为对象,之后详细研究json_decode的参数,使用等
$obj = json_decode(json_encode($array)); // 参数为对象 string(62) "{"a":"he","b":"llo","c":"world","d":{"1":"a","2":"b","3":"c"}}"
var_dump(json_encode($obj)); // 参数为字符串
// string(90) ""{\"a\":\"he\",\"b\":\"llo\",\"c\":\"world\",\"d\":{\"1\":\"a\",\"2\":\"b\",\"3\":\"c\"}}""
var_dump(json_encode(json_encode($obj))); var_dump(json_encode('h"e\l/l[o')); // string(14) ""h\"e\\l\/l[o""
var_dump('h"e\l/l[o'); //string(9) "h"e\l/l[o"

可以发现object和array类型转换为json字符串之后没有差别,而string被json_encode之后,string中的【'】,【"】,【\】,【/】会被转义。

二:接下来看一下第二个参数:
options参考选自原文https://blog.csdn.net/qd824692746/article/details/50912723

JSON_HEX_TAG (integer) 所有的 < 和 > 转换成 \u003C 和 \u003E。 自 PHP 5.3.0 起生效。

JSON_HEX_AMP (integer) 所有的 & 转换成 \u0026。 自 PHP 5.3.0 起生效。

JSON_HEX_APOS (integer) 所有的 ' 转换成 \u0027。 自 PHP 5.3.0 起生效。

JSON_HEX_QUOT (integer) 所有的 " 转换成 \u0022。 自 PHP 5.3.0 起生效。

JSON_FORCE_OBJECT (integer) 使一个非关联数组输出一个类(Object)而非数组。 在数组为空而接受者需要一个类(Object)的时候尤其有用。 自 PHP 5.3.0 起生效。

JSON_NUMERIC_CHECK (integer) 将所有数字字符串编码成数字(numbers)。 自 PHP 5.3.3 起生效。

JSON_BIGINT_AS_STRING (integer) 将大数字编码成原始字符原来的值。 自 PHP 5.4.0 起生效。

JSON_PRETTY_PRINT (integer) 用空白字符格式化返回的数据。 自 PHP 5.4.0 起生效。

JSON_UNESCAPED_SLASHES (integer) 不要编码 /。 自 PHP 5.4.0 起生效。

JSON_UNESCAPED_UNICODE (integer) 以字面编码多字节 Unicode 字符(默认是编码成 \uXXXX)。 自 PHP 5.4.0 起生效。

大家可以参考以上罗列出来的常量测试一下。也可以选取自己业务逻辑上的来达到自己的目的。

三:接下来说一下第三个参数,在本人购买的PHP中文手册中发现json_encode函数中只有以上两个参数,并没有第三个参数depth,在查阅PHP官方文档中是有这个参数的,但是文档中并没有详细的解释以及示例。猜测大概率是PHP版本的问题,也许购买的中文手册是基于旧版本的,官方文档是最新版。在测试中发现第三个参数的不同导致的输出是有区别的。

// 数组深度为2
$array = [
'a' => '"\/hello',
'b' => '\world',
'c' => '/php_json_decode',
'd' => [
1 => '"\/php',
2 => '//\js',
3 => 'python',
4 => 'golang'
]
]; var_dump(json_encode($array,0,1)); // bool(false) var_dump(json_encode($array,0,2));
// string(120) "{"a":"\"\\\/hello","b":"\\world","c":"\/php_json_decode","d":{"1":"\"\\\/php","2":"\/\/\\js","3":"python","4":"golang"}}" var_dump(json_encode($array,0,3));
// string(120) "{"a":"\"\\\/hello","b":"\\world","c":"\/php_json_decode","d":{"1":"\"\\\/php","2":"\/\/\\js","3":"python","4":"golang"}}" var_dump(json_encode($array,0,4));
// string(120) "{"a":"\"\\\/hello","b":"\\world","c":"\/php_json_decode","d":{"1":"\"\\\/php","2":"\/\/\\js","3":"python","4":"golang"}}" // 数组深度为3
$array = [
'a' => '"\/hello',
'b' => '\world',
'c' => '/php_json_decode',
'd' => [
1 => '"\/php',
2 => '//\js',
3 => 'python',
4 => 'golang'
],
'e' => [
'xxx' => [
'hello' => 'world'
]
]
]; var_dump(json_encode($array,0,1));
// bool(false) var_dump(json_encode($array,0,2));
// bool(false) var_dump(json_encode($array,0,3));
// string(150) "{"a":"\"\\\/hello","b":"\\world","c":"\/php_json_decode","d":{"1":"\"\\\/php","2":"\/\/\\js","3":"python","4":"golang"},"e":{"xxx":{"hello":"world"}}}" var_dump(json_encode($array,0,4));
// string(150) "{"a":"\"\\\/hello","b":"\\world","c":"\/php_json_decode","d":{"1":"\"\\\/php","2":"\/\/\\js","3":"python","4":"golang"},"e":{"xxx":{"hello":"world"}}}"

发现假如depth的值小于数组的维度的话会输出bool(false),反之正常解析成json串。不知道这个字段存在的意义,希望各位大佬给出正解。

 

PHP json_encode函数的参数说明的更多相关文章

  1. PHP json_encode() 函数介绍

    在 php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它. 这个函数的功能是将数值转换成json数据存储格式. ...

  2. (转载)PHP json_encode() 函数介绍

    (转载) 在 php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它. 这个函数的功能是将数值转换成json数据存 ...

  3. php的json_encode函数问题

    php的json_encode函数问题: $ary = []; $ary[0] = 'a'; $ary[1] = 'b'; echo json_encode($ary) . '<br>'; ...

  4. PHP的json_encode()函数与JSON对象

    一.问题描述 这周搬砖的时候,前端通过ajax获取后端的数据后,照例用 对象.属性 的方式取值,然而结果总是总是不能如预期般展示在页面上. 先写个 demo 还原下场景:选中一个下拉框列表选项后,会在 ...

  5. PHP json_encode函数中需要注意的地方

    在php中使用 json_encode() 内置函数可以使用得php中的数据更好的与其它语言传递与使用. 这个函数的功能是将数组转换成json数据存储格式: 1 <?php 2 $arr=arr ...

  6. [php] php - json_encode 函数

    json_encode()函数, $arr= array("key"=>null); echo json_encode($arr);{"key":null ...

  7. php数组使用json_encode函数中文被编码成null的原因和解决办法

    大写的囧,提客户处理问题,前端的APP一直在叽叽咂咂,说收到的值是null,弄了半天原来是这个问题,记录下吧 json格式在开发中用的十分广泛.在php中json_encode函数可以直接将数组转成 ...

  8. JSON:使用json_encode函数解析结果为Null

    1.首先,数据库中的json数据是这样的 2.仓鼠使用json_encode()函数进行解析json数据时,显示了一个NULL: 3.这时候,我们需要使用,表示在解析json之前,该json是有语法错 ...

  9. 将数组转化为json字符串(不使用json_encode函数)

    将数组转化为json字符串(不使用json_encode函数) public function arrayToJson($arr,$jsonStr=''){ $jsonStr.='{'; foreac ...

随机推荐

  1. CSS 实现居中 + 清除浮动

    一.水平居中 1.行内元素:text-align:center; 2.块级元素:margin:0 auto; 3.绝对定位和移动:absolute + transform 4.绝对定位和负边距:abs ...

  2. Oracle笔记(十二) 集合、序列

    一.集合 在数学的操作之中存在交.差.并.补的概念,而在数据的查询中也存在此概念,有如下几个连接符号: UNION:连接两个查询,相同的部分不显示: UNION ALL:连接两个查询,相同的部分显示: ...

  3. 使用canvas 代码画小猪佩奇

    最近不是小猪佩奇很火嘛!!! 前几天 在知乎 看见了别人大佬用python写的 小猪佩奇,  顿时想学 ,可是 自己 没学过python(自己就好爬爬图片,,,,几个月没用 又丢了) 然后 就想画一个 ...

  4. idHTTP.Post

    procedure TForm4.Button2Click(Sender: TObject); var sResponse: string; EnvStr : TStringStream; begin ...

  5. CentOS7 基于 subversion 配置 SVN server

    由于 Window Server 环境下,VisualSVN Server Community 版本只支持 15 个同时在线用户,所以彻底放弃 Windows Server,在 Linux Serve ...

  6. PEP8规范 Python

    前言 从很多地方搬运+总结,以后根据这个标准再将python的一些奇技淫巧结合起来,写出更pythonic的代码~ PEP8 编码规范 英文原版请点击这里 以下是@bobo的整理,原文请见PEP8 P ...

  7. CodeForces - 1221E Game With String 分类讨论

    首先分析A能获胜的情况 A能获胜 当且仅当A拿完后所有剩下的都<b 所以一旦存在一个大小为X的 且 b<=X<a 则必是后手赢 当X为 a<=x<2*b 的时候 无论A或 ...

  8. Caused by: com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a resource from com.mchange.v2.resourcepool.BasicResourcePool@1483de4 -- timeout at awaitAvailable(

    Caused by: com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire ...

  9. 我对line-height及vertical-align的一点理解

    张鑫旭老师在文章<我对CSS vertical-align的一些理解与认识(一)>中提到: vertical-align:middle属性的表现与否,仅仅与其父标签有关,至于我们通常看到的 ...

  10. GET与POST方法和用curl命令执行

    1.超文本传输协议 超文本传输协议(HTTP)的设计目的是保证客户机与服务器之间的通信,web 浏览器可能是客户端,而计算机上的网络应用程序也可能作为服务器端. HTTP的工作方式是客户机与服务器之间 ...