糊涂的糊涂 發表於 2019-8-31 10:54:00

php json_encode()函数返回对象和数组问题

<p>php json_encode() 函数格式化数据时会根据不同的数组类型格式化不同类型的json数据</p>
<p><span style="background-color: rgba(255, 102, 0, 1)">&nbsp;</span>&nbsp;索引数组时</p>
<div class="cnblogs_code">
<pre>&lt;?<span style="color: rgba(0, 0, 0, 1)">php
</span><span style="color: rgba(128, 0, 128, 1)">$arr</span> = ;
</span><span style="color: rgba(0, 128, 128, 1)">print_r</span>(json_encode(<span style="color: rgba(128, 0, 128, 1)">$arr</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">输出 </span></pre>
</div>
<p><span style="background-color: rgba(255, 102, 0, 1)">&nbsp;</span> 关联数组时</p>
<div class="cnblogs_code">
<pre>&lt;?<span style="color: rgba(0, 0, 0, 1)">php
</span><span style="color: rgba(128, 0, 128, 1)">$arr</span> =<span style="color: rgba(0, 0, 0, 1)"> [
    </span>"name"=&gt;"Bob",
    "job"=&gt;"IT"<span style="color: rgba(0, 0, 0, 1)">
];
</span><span style="color: rgba(0, 128, 128, 1)">print_r</span>(json_encode(<span style="color: rgba(128, 0, 128, 1)">$arr</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">输出{"name":"Bob","job":"IT"}</span></pre>
</div>
<p><span style="background-color: rgba(255, 102, 0, 1)">&nbsp;</span> 空数组</p>
<div class="cnblogs_code">
<pre>&lt;?<span style="color: rgba(0, 0, 0, 1)">php
</span><span style="color: rgba(128, 0, 128, 1)">$arr</span> =<span style="color: rgba(0, 0, 0, 1)"> [];
</span><span style="color: rgba(0, 128, 128, 1)">print_r</span>(json_encode(<span style="color: rgba(128, 0, 128, 1)">$arr</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">输出 []</span></pre>
</div>
<p>索引数组时生成的是数组类型数据,关联数组时生成的是对象类型的数据,空数组返回的是数组类型。但是当碰到同一个字段返回的数组可能是关联数组也可能是空数组时,就会在app端出现数据类型不一致的问题,解决方式有两种:</p>
<p>一,使用 json_encode的&nbsp;JSON_FORCE_OBJECT 模式</p>
<div class="cnblogs_code">
<pre>&lt;?<span style="color: rgba(0, 0, 0, 1)">php
</span><span style="color: rgba(128, 0, 128, 1)">$arr</span> =<span style="color: rgba(0, 0, 0, 1)"> [];
</span><span style="color: rgba(0, 128, 128, 1)">print_r</span>(json_encode(<span style="color: rgba(128, 0, 128, 1)">$arr</span>,<span style="color: rgba(0, 0, 0, 1)">JSON_FORCE_OBJECT));
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">输出 {}</span></pre>
</div>
<p>但是这种存在一个问题,它会把所有的数据都以对象的方式返回,包括索引数组:</p>
<div class="cnblogs_code">
<pre>&lt;?<span style="color: rgba(0, 0, 0, 1)">php
</span><span style="color: rgba(128, 0, 128, 1)">$arr</span> = ;
</span><span style="color: rgba(0, 128, 128, 1)">print_r</span>(json_encode(<span style="color: rgba(128, 0, 128, 1)">$arr</span>,<span style="color: rgba(0, 0, 0, 1)">JSON_FORCE_OBJECT));
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">输出{"0":1,"1":2,"2":3,"3":4,"4":5,"5":6}</span></pre>
</div>
<p>二,定义空数据时使用 ArrayObject 定义而不适用&nbsp;&nbsp;<span class="cnblogs_code"><span style="color: rgba(0, 0, 255, 1)">Array</span>()</span>&nbsp;或者&nbsp;&nbsp;<span class="cnblogs_code">[]</span>&nbsp;</p>
<div class="cnblogs_code">
<pre>&lt;?<span style="color: rgba(0, 0, 0, 1)">php
</span><span style="color: rgba(128, 0, 128, 1)">$arr</span> = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> ArrayObject();
</span><span style="color: rgba(0, 128, 128, 1)">print_r</span>(json_encode(<span style="color: rgba(128, 0, 128, 1)">$arr</span><span style="color: rgba(0, 0, 0, 1)">));
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">输出 {}</span></pre>
</div>
<p>到这里我们可以随意的控制返回的json数据中数据的类型啦!!!!</p><br><br>
来源:https://www.cnblogs.com/itsuibi/p/11433231.html
頁: [1]
查看完整版本: php json_encode()函数返回对象和数组问题