飞龙在天戴洪民 發表於 2019-10-16 11:17:00

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>&nbsp;</p>
<h3>1、json_encode第二个参数稍微常见例子?</h3>
<h5>JSON_UNESCAPED_UNICODE (integer) 以字面编码多字节 Unicode 字符(默认是编码成 \uXXXX)。 自 PHP 5.4.0 起生效。</h5>
<p>&nbsp;</p>
<p>JSON_HEX_TAG (integer) 所有的 &lt; 和 &gt; 转换成 \u003C 和 \u003E。 自 PHP 5.3.0 起生效。<br><br>JSON_HEX_AMP (integer) 所有的 &amp; 转换成 \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>&nbsp;</p>
<p>&nbsp;</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' =&gt; 'he',
      'b' =&gt; 'llo',
      'c' =&gt; 'world',
      'd' =&gt; [
            1 =&gt; 'a',
            2 =&gt; 'b',
            3 =&gt; '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)    所有的 &lt; 和 &gt; 转换成 \u003C 和 \u003E。 自 PHP 5.3.0 起生效。</p>
<p>JSON_HEX_AMP (integer)    所有的 &amp; 转换成 \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' =&gt; '"\/hello',
          'b' =&gt; '\world',
          'c' =&gt; '/php_json_decode',
          'd' =&gt; [
                  1 =&gt; '"\/php',
                  2 =&gt; '//\js',
                  3 =&gt; 'python',
                  4 =&gt; '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' =&gt; '"\/hello',
              'b' =&gt; '\world',
              'c' =&gt; '/php_json_decode',
          'd' =&gt; [
                  1 =&gt; '"\/php',
                  2 =&gt; '//\js',
                  3 =&gt; 'python',
                  4 =&gt; 'golang'
          ],
          'e' =&gt; [
                  'xxx' =&gt; [
                        'hello' =&gt; '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>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</div>
</div>
<div>&nbsp;</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]
查看完整版本: PHP json_encode函数的参数说明