深入理解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 相关文章推荐
PHP原理之异常机制深入分析
Aug 08 PHP
PHP的加密方式及原理
Jun 14 PHP
php生成静态文件的多种方法分享
Jul 17 PHP
wamp下修改mysql访问密码的解决方法
May 07 PHP
PHP中常用的转义函数
Feb 28 PHP
PHP中使用数组指针函数操作数组示例
Nov 19 PHP
PHP整合PayPal支付
Jun 11 PHP
thinkPHP中create方法与令牌验证实例浅析
Dec 08 PHP
PHP实现统计在线人数功能示例
Oct 15 PHP
php web环境和命令行环境下查找php.ini的位置
Jul 17 PHP
php的命名空间与自动加载实现方法
Aug 25 PHP
laravel 使用事件系统统计浏览量的实现
Oct 16 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
桌面中心(三)修改数据库
2006/10/09 PHP
实用函数2
2007/11/08 PHP
php引用返回与取消引用的详解
2013/06/08 PHP
[原创]php实现 data url的图片生成与保存
2016/12/04 PHP
javascript之锁定表格栏位
2007/06/29 Javascript
jquery text,radio,checkbox,select操作实现代码
2009/07/09 Javascript
获取内联和链接中的样式(js代码)
2013/04/11 Javascript
jquery数组之存放checkbox全选值示例代码
2013/12/20 Javascript
javascript学习笔记(五)原型和原型链详解
2014/10/08 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
2015/04/06 Javascript
JS实现自定义简单网页软键盘效果代码
2015/11/05 Javascript
轻松掌握JavaScript单例模式
2016/08/25 Javascript
标准的js无缝滚动效果
2016/08/30 Javascript
jQuery使用getJSON方法获取json数据完整示例
2016/09/13 Javascript
微信小程序-详解数据缓存
2016/11/24 Javascript
vue动态组件实现选项卡切换效果
2017/03/08 Javascript
JavaScript中splice与slice的区别
2017/05/09 Javascript
解决AjaxFileupload 上传时会出现连接重置的问题
2017/07/07 Javascript
浅谈NodeJs之数据库异常处理
2017/10/25 NodeJs
基于jQuery拖拽事件的封装
2020/11/29 jQuery
跟老齐学Python之有容乃大的list(1)
2014/09/14 Python
使用python 将图片复制到系统剪贴中
2019/12/13 Python
python中JWT用户认证的实现
2020/05/18 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
2020/10/20 Python
HTML5 Convas APIs方法详解
2015/04/24 HTML / CSS
Tech21美国/加拿大:英国NO.1防摔保护壳品牌
2018/01/20 全球购物
LORAC官网:美国彩妆品牌
2019/08/27 全球购物
DOUGLAS波兰:在线销售香水和化妆品
2020/07/05 全球购物
POS解决方案:MUNBYN(热敏打印机、条形码扫描仪)
2020/06/09 全球购物
学校安全防火方案
2014/06/07 职场文书
法人单位适用的授权委托书
2014/09/19 职场文书
2014年医药代表工作总结
2014/11/22 职场文书
2015年科协工作总结
2015/05/19 职场文书
实用干货:敬酒词大全,帮你应付各种场合
2019/11/21 职场文书
基于Apache Hudi在Google云构建数据湖平台的思路详解
2022/04/07 Servers
码云(gitee)通过git自动同步到阿里云服务器
2022/12/24 Servers