PHP json_encode函数的参数说明
<h1 style="text-align: center">PHP json_encode函数的参数说明</h1><h2>一、总结</h2>
<h3>一句话总结:</h3>
<h5>· json_encode常常被用于将数组转换成json格式的字符串来表示,但是json_encode的第一个参数却并不一定是数组格式,第一个参数可以为对象,数组,字符串。</h5>
<h5>· object和array类型转换为json字符串之后没有差别,而string被json_encode之后,string中的【'】,【"】,【\】,【/】会被转义。</h5>
<p> </p>
<h3>1、json_encode第二个参数稍微常见例子?</h3>
<h5>JSON_UNESCAPED_UNICODE (integer) 以字面编码多字节 Unicode 字符(默认是编码成 \uXXXX)。 自 PHP 5.4.0 起生效。</h5>
<p> </p>
<p>JSON_HEX_TAG (integer) 所有的 < 和 > 转换成 \u003C 和 \u003E。 自 PHP 5.3.0 起生效。<br><br>JSON_HEX_AMP (integer) 所有的 & 转换成 \u0026。 自 PHP 5.3.0 起生效。<br><br>JSON_HEX_APOS (integer) 所有的 ' 转换成 \u0027。 自 PHP 5.3.0 起生效。<br><br>JSON_HEX_QUOT (integer) 所有的 " 转换成 \u0022。 自 PHP 5.3.0 起生效。<br><br>JSON_FORCE_OBJECT (integer) 使一个非关联数组输出一个类(Object)而非数组。 在数组为空而接受者需要一个类(Object)的时候尤其有用。 自 PHP 5.3.0 起生效。<br><br>JSON_NUMERIC_CHECK (integer) 将所有数字字符串编码成数字(numbers)。 自 PHP 5.3.3 起生效。<br><br>JSON_BIGINT_AS_STRING (integer) 将大数字编码成原始字符原来的值。 自 PHP 5.4.0 起生效。<br><br>JSON_PRETTY_PRINT (integer) 用空白字符格式化返回的数据。 自 PHP 5.4.0 起生效。<br><br>JSON_UNESCAPED_SLASHES (integer) 不要编码 /。 自 PHP 5.4.0 起生效。<br><br>JSON_UNESCAPED_UNICODE (integer) 以字面编码多字节 Unicode 字符(默认是编码成 \uXXXX)。 自 PHP 5.4.0 起生效。</p>
<p> </p>
<p> </p>
<h2>二、PHP json_encode函数的参数说明</h2>
<p>转自或参考:PHP json_encode函数的参数说明<br>https://blog.csdn.net/it_r00t/article/details/83993809</p>
<div id="article_content" class="article_content clearfix"><br>
<div id="content_views" class="htmledit_views">
<p><strong> 今天主要看了一下json_encode函数的参数以及使用,以下主要是对json_encode第2/3个参数的一些自己认为的解析。</strong></p>
<p><strong> 首先看一下php.net中关于json_encode的说明:</strong></p>
<p> <strong>Description</strong></p>
<p><strong> string json_encode ( mixed <code>$value</code> [, int <code>$options</code> = 0 [, int <code>$depth</code> = 512 ]] )</strong></p>
<p><strong> Returns a string containing the JSON representation of the supplied <code>value // 返回json格式的字符串</code></strong></p>
<p><strong> The encoding is affected by the supplied <code>options</code> and additionally the encoding of float values depends on the value of serialize_precision. <code>// 所返回json格式的字符串取决于第二个参数</code></strong></p>
<p><strong> 一: json_encode常常被用于将数组转换成json格式的字符串来表示,但是json_encode的第一个参数却并不一定是数组格式,第一个参数可以为对象,数组,字符串。</strong></p>
<pre class="has"><code class="language-php">
$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"</code></pre>
<p><strong>可以发现object和array类型转换为json字符串之后没有差别,而string被json_encode之后,string中的【'】,【"】,【\】,【/】会被转义。</strong></p>
<p><strong>二:接下来看一下第二个参数:<br>
options参考选自原文:https://blog.csdn.net/qd824692746/article/details/50912723 </strong></p>
<p>JSON_HEX_TAG (integer) 所有的 < 和 > 转换成 \u003C 和 \u003E。 自 PHP 5.3.0 起生效。</p>
<p>JSON_HEX_AMP (integer) 所有的 & 转换成 \u0026。 自 PHP 5.3.0 起生效。</p>
<p>JSON_HEX_APOS (integer) 所有的 ' 转换成 \u0027。 自 PHP 5.3.0 起生效。</p>
<p>JSON_HEX_QUOT (integer) 所有的 " 转换成 \u0022。 自 PHP 5.3.0 起生效。</p>
<p>JSON_FORCE_OBJECT (integer) 使一个非关联数组输出一个类(Object)而非数组。 在数组为空而接受者需要一个类(Object)的时候尤其有用。 自 PHP 5.3.0 起生效。</p>
<p>JSON_NUMERIC_CHECK (integer) 将所有数字字符串编码成数字(numbers)。 自 PHP 5.3.3 起生效。</p>
<p>JSON_BIGINT_AS_STRING (integer) 将大数字编码成原始字符原来的值。 自 PHP 5.4.0 起生效。</p>
<p>JSON_PRETTY_PRINT (integer) 用空白字符格式化返回的数据。 自 PHP 5.4.0 起生效。</p>
<p>JSON_UNESCAPED_SLASHES (integer) 不要编码 /。 自 PHP 5.4.0 起生效。</p>
<p>JSON_UNESCAPED_UNICODE (integer) 以字面编码多字节 Unicode 字符(默认是编码成 \uXXXX)。 自 PHP 5.4.0 起生效。</p>
<p><strong> 大家可以参考以上罗列出来的常量测试一下。也可以选取自己业务逻辑上的来达到自己的目的。</strong></p>
<p><strong>三:接下来说一下第三个参数,在本人购买的PHP中文手册中发现json_encode函数中只有以上两个参数,并没有第三个参数depth,在查阅PHP官方文档中是有这个参数的,但是文档中并没有详细的解释以及示例。猜测大概率是PHP版本的问题,也许购买的中文手册是基于旧版本的,官方文档是最新版。在测试中发现第三个参数的不同导致的输出是有区别的。</strong></p>
<pre class="has"><code class="language-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"}}}"
</code></pre>
<p><strong>发现假如depth的值小于数组的维度的话会输出bool(false),反之正常解析成json串。不知道这个字段存在的意义,希望各位大佬给出正解。</strong></p>
<p> </p>
<p> </p>
<p> </p>
</div>
</div>
<div> </div>
</div>
<div id="MySignature" role="contentinfo">
<div id="fry_added_part">
<div class="fry_website">
<div class="fry_website" style="color:#3c8dbc;padding: 10px 0;display:none;">
我的旨在学过的东西不再忘记(主要使用艾宾浩斯遗忘曲线算法及其它智能学习复习算法)的偏公益性质的完全免费的编程视频学习网站:
【读书编程笔记】fanrenyi.com;有各种前端、后端、算法、大数据、人工智能等课程。
</div>
<div class="copyright" style="color: red;padding-bottom: 10px;">
版权申明:欢迎转载,但请注明出处
<div style="font-size: 12px">一些博文中有一些参考内容因时间久远找不到来源了没有注明,如果侵权请联系我删除。</div>
</div>
<div id="fry_know_friends" style="color: red;padding-bottom: 10px;font-size: 22px;">
<div style="display:none;"></div>
<div style="display:none;">在校每年国奖、每年专业第一,加拿大留学,先后工作于华东师范大学和香港教育大学。</div>
<div style="display:none;">2025-04-30:宅加太忙,特此在网上找女朋友,坐标上海,非诚勿扰,vx:fan404006308</div>
</div>
<div class="copyright" style="color: green;padding-bottom: 10px;">
录播课资料github地址:https://github.com/fry404006308/fry_course_materials
</div>
<div style="display:none;"></div>
</div>
<div class="fry_tech_group" style="color: mediumpurple;">
<div>
AI交流资料群:753014672
</div>
</div>
<div class="fry_recommend">
<h2>作者相关推荐</h2>
<div id="fry_recommend" style="padding-bottom: 40px">
</div>
</div>
<style>
#fry_added_part .inspiration_content{
//max-height: 120px;
overflow: auto;
margin: 20px 0;
}
#fry_added_part .fry_inspiration .simple a{
margin-right: 25px;
}
</style>
<div style="display:none;" class="fry_inspiration">
<div style="color: red;font-size: 20px;text-align: center;" class="title">
感悟总结
</div>
<!--分为详细部分和简略部分-->
<!--详细部分-->
<div class="detail">
<div class="url_set">
<div style="display: none;" class="per_url" href="https://www.cnblogs.com/Renyi-Fan/p/13498246.html"></div>
<!--<div style="display: none;" class="per_url" href="https://www.cnblogs.com/Renyi-Fan/p/14379366.html"></div>-->
<!--<div style="display: none;" class="per_url" href="https://www.cnblogs.com/Renyi-Fan/p/14154624.html"></div>-->
</div>
<div class="content_set"></div>
</div>
<!--简略部分-->
<div style="display: none;" class="simple">
<div style="color: #FF9966;margin-bottom: 10px;">其它重要感悟总结</div>
<div>
感悟总结200813
最近心境200830
最近心境201019
201218-210205
</div>
</div>
</div>
</div><br><br>
来源:https://www.cnblogs.com/Renyi-Fan/p/11682199.html
頁:
[1]