PHP JSON数组与对象的理解

Posted 叫我大头

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP JSON数组与对象的理解相关的知识,希望对你有一定的参考价值。

php后端和客户端数据交互的过程中,JSON数据中有时格式不定,一会儿是数组,一会儿是对象,弄得客户端开发人员要崩溃的感觉。

因此,前后端相关人员先对PHP的json_encode函数原理有必要的了解是最重要的一个环节。

PHP中的array是个万能的数据结构,并不像其它语言根据需要的场景会定义很多约束性的数据类型来描述结构,所以PHP程序员是很难给客户端人员讲清楚返回的是什么结构的数据的。

也就变成明明是通过PHP的数组数据编码成json的,但输出值有时是数组、有时是对象的情况。

/*
 * 如果想生成一个json格式数组(vector)而 非对象格式(map),那么要数组下标满足一下情况
 *1 必须是索引数组
 *2 必须从0开始
 *3 必须从小到大一次增大 中间不刻意跳跃,顺序不可变动
 * */
$vector0 = [
    1, 2, 3, 4, 5
];
echo json_encode($vector0)."<br/>";

$vector1 = [0 => 0, 1 => 1, 2 => 2];
echo  json_encode($vector1)."<br/>" ;


$map0  = [0 => 0, 3 => 1, 5 => 2];
echo  json_encode($map0)."<br/>" ;

$map1  = [ 1 => 1, 2 => 2];
echo  json_encode($map1)."<br/>" ;

$map2  = [\'a\'=>\'a\',\'b\'=>\'b\',\'c\'=>\'c\'];
echo  json_encode($map2)."<br/>" ;

image

其实在浏览器中javascript没有关联数组,因此json_encode()函数必须把关联数组转化为对象。(我猜:前端数组基本都是连续得,所以不连续得数组不能被转化成数组)。

如果要将数组转化为json对象,有两种:

$vector0 = [
    1, 2, 3, 4, 5
];
echo json_encode($vector0,JSON_FORCE_OBJECT)."<br/>";

echo json_encode((object)$vector0)."<br/>";

image

将数组转为json对象:

//json => array
$json_ob =\'{"a":"a","b":"b","c":"c"}\';

var_dump(json_decode($json_ob)); //是生成一个PHP对象:
var_dump(json_decode($json_ob,true));// 加一个参数 TRUE ,转化为数组
image

以上是关于PHP JSON数组与对象的理解的主要内容,如果未能解决你的问题,请参考以下文章

PHP JSON数组与对象的理解

错误代码:错误域 = NSCocoaErrorDomain 代码 = 3840“JSON 文本没有以数组或对象和允许未设置片段的选项开头。”

Alamofire 文件上传出现错误“JSON 文本未以数组或对象开头,并且允许未设置片段的选项”

微信小程序json数据如何处理?

PHP:对象数组 - 序列化与 json_encode - 替代方案?

解析:JSON 文本没有以数组或对象开头,并且允许未设置片段的选项