关联PHP数组(包含对象)的非破坏性JSON编码/解码
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了关联PHP数组(包含对象)的非破坏性JSON编码/解码,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2113字,纯文字阅读大概需要4分钟。
内容图文
![关联PHP数组(包含对象)的非破坏性JSON编码/解码](/upload/InfoBanner/zyjiaocheng/731/8843c3eaa5c64d7f96a44000b8006a4a.jpg)
我能够以解码值与原始输入匹配的方式对索引数组进行JSON编码和解码:
$array_indexed = ['A'];
$encoded = json_encode($array_indexed);
$decoded = json_decode($encoded);
var_dump($array_indexed);
array(1) {
[0]=>
string(1) "A"
}
var_dump($decoded);
array(1) {
[0]=>
string(1) "A"
}
但是,当我编码一个关联数组时,我最终得到一个对象:
$array_associate = [ 'FOO' => 'BAR'];
$encoded = json_encode($array_associate);
$decoded = json_decode($encoded);
var_dump($array_associate);
array(1) {
["FOO"]=>
string(3) "BAR"
}
var_dump($decoded);
object(stdClass)#1 (1) {
["FOO"]=>
string(3) "BAR"
}
我的理解是这是正常的行为,因为Javascript不支持关联数组,而是使用对象来表示,因此在编码关联数组时,它最终被编码为对象(因此被解码).
Q1:你确认了吗?
可能的解决方案
序列化/反序列化:
绝对想要在序列化/反序列化中使用json_encode / json_decode的原因是编码形式更加简洁,这很重要,因为它最终存储在缓存中并且缓存空间有限:
var_dump(json_encode(['A'=>1,'B'=>2])); // string(13) "{"A":1,"B":2}"
var_dump(serialize(['A'=>1,'B'=>2])); // string(30) "a:2:{s:1:"A";i:1;s:1:"B";i:2;}
Q2:您是否曾经遇到过使用序列化的缓存空间问题,如果是这样,您是如何处理除了使用json_encode之外的其他问题(我正在考虑压缩,但如果值最终会在MySQL数据库缓存中结束,那么我就是有点不安吗)?
json_decode($JSON,真):
问题是应该保留对象的嵌套对象也会转换为数组:
$obj = new stdClass;
$obj->foo = 'bar';
$array_associate = [ 'A' => $obj];
$encoded = json_encode($array_associate);
var_dump(json_decode($encoded,true));
array(1) {
["A"]=>
array(1) { <---------------- NO LONGER AN OBJECT, DON'T WANT THAT
["foo"]=>
string(3) "bar"
}
}
将对象的对象转换为对象数组:
仍然基于上面的例子
$object_of_objects = json_decode($encoded);
$array = [];
foreach($object_of_objects as $key=>$object) {
$array[$key] = $object;
}
var_dump($array);
array(1) {
["A"]=>
object(stdClass)#6 (1) {
["foo"]=>
string(3) "bar"
}
}
问题3:您是否看到任何其他解决方案将关联对象数组转换为JSON并返回,同时保留原始输入?
解决方法:
由于无法在json中编写关联数组,因此它将被编写为对象,因此PHP会在解码时将其作为对象进行处理.
为了使PHP将其作为数组读取,您必须使用set the second parameter of json_decode to true:
json_decode($json, true)
^^^^
内容总结
以上是互联网集市为您收集整理的关联PHP数组(包含对象)的非破坏性JSON编码/解码全部内容,希望文章能够帮你解决关联PHP数组(包含对象)的非破坏性JSON编码/解码所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。