PHP JSON数组与对象的换成的理解
2017-06-19 13:08:20  By: dwtedx

在PHP后端和客户端数据交互的过程中、JSON数据中有时格式不定、一会儿是数组、一会儿是对象、弄得客户端开发人员要崩溃的感觉、因此、前后端相关人员先对PHP的json_encode函数原理有必要的了解是最重要的一个环节


PHP中的array是个万能的数据结构、并不像其它语言根据需要的场景会定义很多约束性的数据类型来描述结构、所以PHP程序员是很难给客户端人员讲清楚返回的是什么结构的数据的、也就变成明明是通过PHP的数组数据编码成json的、但输出值有时是数组、有时是对象的情况

/*
如果你想生成一个json格式的数组格式(Vector)而非对象格式(Map)的,那么数据的下标:
必须是数字索引、
必须从0开始、
必须从小到大依次增加、中间不可以跳跃、顺序不可变动.
*/

//符合数组
$vector = [
    12, 23, 18
];
echo json_encode($vector);

//符合数组
$vector2 = [
    0 => 12, 1 => 23, 2 => 18
];
echo json_encode($vector2);

//不符合数组、下标有跳跃
$map = [
    0 => 12, 1 => 23, 2 => 18, 4 => 20
];
echo json_encode($map);

//不符合数组、下标顺序不对
$map = [
    0 => 12, 1 => 23, 3 => 18, 2 => 20
];
echo json_encode($map);

//不符合数组、下标没有从0开始
$map_1 = [
    1 => ´111´, 2 => ´asdfa´
];
echo json_encode($map_1);

//典型的对象格式
$map_2 = [´abc´ => 1, ´de´ => 2, ´fi´ => null];
echo json_encode($map_2);

/**
 * 请注意上面的变量命名、对应于Hack中的概念、Vector和Map为两种数据集合类型
 * 如果你需要将"索引数组"强制转化成"对象"、可以这样写
 * json_encode((object) $a);
 * 或
 * json_encode ($a, JSON_FORCE_OBJECT);
 *
 */


解决方案是什么呢?就是通过PHP封装Vector和Map这两种数据结构的类、在构造json输出结构时

以这两种类型做封装和转换、来确保结构的确定性、至少、先要建立这样的类型概念

若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力

想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)

或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教

为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


快速评论


技术评论

  • 该技术还没有评论、赶快抢沙发吧...
DD记账
top
+