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/>" ;

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

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

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

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

将数组转为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 ,转化为数组

时间: 2024-10-12 16:32:42

PHP JSON数组与对象的理解的相关文章

Ajax调用返回json数组,对象 (JSONArray.fromObject)

JSONArray和JSONObject的详细使用:http://blog.csdn.net/yangbobo1992/article/details/8350765 /** * ajax调用返回json数组 * @param list */ public void printList(List<?> list){ HttpServletResponse response = ServletActionContext.getResponse(); //获取response实例 response

(精华)将json数组和对象转换成List和Map(小龙哥和牛徳鹤的对话)

将java标准的数据结构ArrayList和HashMap转换成json对象和数组很简单 只需要JSONArray.fromObject(obj);或者JSONObject.fromObject(obj); 将json对象转换成Map(必须用到遍历) public static void main(String[] args){ HashMap<String, Object> map = new HashMap<String, Object>(); map.put("na

C/C++,Java,PHP,JavaScript,Json数组、对象赋值时,最后一个元素后面是否可以带逗号?

1 C,C++,Java,PHP都能容忍末尾的逗号 C,C++,Java中对数组赋值时,最后一个元素末尾的逗号可有可无.下面两行代码对这些语言来说是等效的. int a[] = {1,2,3}; /* 正确 */ int a[] = {1,2,3,}; /* 正确 */ PHP这一点也继承了C的特点,下面的两行代码等效. $a = array(1,2,3); /* 正确 */ $a = array(1,2,3,); /* 正确 */ 2 JavaScript视末尾逗号为语法错误! 然而到了Jav

每天一个JS 小demo之韩雪冬轮播图。主要知识点:html,css布局,对于数组和对象的理解和运用

1 @charset "utf-8"; 2 /* CSS Document */ 3 4 * { padding: 0; margin: 0; } 5 li { list-style: none; } 6 img { border: none; } 7 body { background: #ececec; padding-top: 50px; } 8 9 #automatic { width: 970px; height: 344px; position: relative; mar

json数组对象和对象数组

一.Json的简单介绍 从结构上看,所有的数据最终都可以分成三种类型: 第一种类型是scalar(标量),也就是一个单独的string(字符串)或数字(numbers),比如“北京”这个单独的词. 第二种类型是sequence(序列),也就是若干个相关的数据按照一定顺序并列在一起,又叫做array(数组)或List(列表),比如“北京,东京”. 第三种类型是mapping(映射),也就是一个名/值对(Name/value),即数据有一个名称,还有一个与之相对应的值,这又称作hash(散列)或di

关于json数组对象和对象数组遇到的一些问题

###json数组对象和对象数组一.Json的简单介绍 从结构上看,所有的数据最终都可以分成三种类型: 第一种类型是scalar(标量),也就是一个单独的string(字符串)或数字(numbers),比如"北京"这个单独的词. 第二种类型是sequence(序列),也就是若干个相关的数据按照一定顺序并列在一起,又叫做array(数组)或List(列表),比如"浙江,江苏". 第三种类型是mapping(映射),也就是一个名/值对(Name/value),即数据有一

json数组对象和对象数组(转)

转自:http://www.cnblogs.com/zhangji/archive/2011/09/02/2163811.html 一.Json的简单介绍 从结构上看,所有的数据最终都可以分成三种类型: 第一种类型是scalar(标量),也就是一个单独的string(字符串)或数字(numbers),比如“北京”这个单独的词. 第二种类型是sequence(序列),也就是若干个相关的数据按照一定顺序并列在一起,又叫做array(数组)或List(列表),比如“北京,东京”. 第三种类型是mapp

转 json数组对象和对象数组

一.Json的简单介绍 从结构上看,所有的数据最终都可以分成三种类型: 第一种类型是scalar(标量),也就是一个单独的string(字符串)或数字(numbers),比如“北京”这个单独的词. 第二种类型是sequence(序列),也就是若干个相关的数据按照一定顺序并列在一起,又叫做array(数组)或List(列表),比如“北京,东京”. 第三种类型是mapping(映射),也就是一个名/值对(Name/value),即数据有一个名称,还有一个与之相对应的值,这又称作hash(散列)或di

js中数组,对象,json区别

对于js新手,这是我这周项目总结.包括数组,对象,json区别,以及前后台数据传输 数组:批量存放数据的工具,包括取值,数组的各种操作,[ ]在js中只表示数组,或者访问对象的属性,昨天还碰到了将值转化为数组,进行json字符转转化的例子.下面会给出具体例子 var arrData=["1","2","3']; var arrData=new Array(); var paramvo=[task_id];// 定义数组paramvo,值为[9999],方便