深入理解PHP JSON数组与对象


Posted in PHP onJuly 19, 2016

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

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

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

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

<?php
/*
如果你想生成一个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输出结构时,以这两种类型做封装和转换,来确保结构的确定性。

以上所述是小编给大家介绍的PHP JSON数组与对象,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
PHP5 安装方法
Oct 09 PHP
php下使用以下代码连接并测试
Apr 09 PHP
php中用数组的方法设置cookies
Apr 21 PHP
shopex中集成的站长统计功能的代码简单分析
Aug 11 PHP
浅析PHP递归函数返回值使用方法
Feb 18 PHP
初识PHP
Sep 28 PHP
php判断数组中是否存在指定键(key)的方法
Mar 17 PHP
PHP中的traits实现代码复用使用实例
May 13 PHP
简单谈谈PHP中的include、include_once、require以及require_once语句
Apr 23 PHP
php微信开发之批量生成带参数的二维码
Jun 26 PHP
一个实用的php验证码类
Jul 06 PHP
PHP实现的服务器一致性hash分布算法示例
Aug 09 PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
Jul 18 #PHP
完美利用Yii2微信后台开发的系列总结
Jul 18 #PHP
PHP中set_include_path()函数相关用法分析
Jul 18 #PHP
PHP中spl_autoload_register()函数用法实例详解
Jul 18 #PHP
详谈PHP程序Laravel 5框架的优化技巧
Jul 18 #PHP
3种方法轻松处理php开发中emoji表情的问题
Jul 18 #PHP
PHP生成图像验证码的方法小结(2种方法)
Jul 18 #PHP
You might like
php中静态类与静态变量用法的区别分析
2015/01/15 PHP
PHP购物车类Cart.class.php定义与用法示例
2016/07/20 PHP
微信公众号开发之通过接口删除菜单
2017/02/20 PHP
PHP中的函数声明与使用详解
2017/05/27 PHP
php并发加锁问题分析与设计代码实例讲解
2021/02/26 PHP
可以支持多中格式的JS键盘
2007/05/02 Javascript
Mootools 1.2教程 滑动效果(Slide)
2009/09/15 Javascript
jquery蒙版控件实现代码
2010/12/08 Javascript
原生JS操作网页给p元素添加onclick事件及表格隔行变色
2013/12/01 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
Vue.js创建Calendar日历效果
2016/11/03 Javascript
JS高级运动实例分析
2016/12/20 Javascript
Bootstrap table使用方法总结
2017/05/10 Javascript
Vue内容分发slot(全面解析)
2017/08/19 Javascript
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
[30:51]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第一局
2016/03/04 DOTA
Python利用multiprocessing实现最简单的分布式作业调度系统实例
2017/11/14 Python
Python求两点之间的直线距离(2种实现方法)
2019/07/07 Python
简单了解Django应用app及分布式路由
2019/07/24 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
关于python的缩进规则的知识点详解
2020/06/22 Python
详解python方法之绑定方法与非绑定方法
2020/08/17 Python
Python 爬取淘宝商品信息栏目的实现
2021/02/06 Python
英格兰橄榄球商店:England Rugby Store
2016/12/17 全球购物
美国职棒大联盟官方网上商店:MLBShop.com
2017/11/12 全球购物
澳大利亚宠物商店:Petbarn
2017/11/18 全球购物
校园文化建设方案
2014/02/03 职场文书
计算机科学系职业生涯规划书
2014/03/08 职场文书
监察建议书范文
2014/03/12 职场文书
《学会合作》教学反思
2014/04/12 职场文书
幼儿园亲子活动总结
2014/04/26 职场文书
团日活动总结模板
2014/06/25 职场文书
违反交通法规检讨书
2014/09/10 职场文书
行政执法作风整顿剖析材料
2014/10/11 职场文书
抄袭同学作业检讨书1000字
2014/11/20 职场文书
2015年大学生实习评语
2015/03/25 职场文书