json_encode($b, JSON_FORCE_OBJECT) 可以强制转换成对象
2016-12-08 11:32
288 查看
最近在为移动端的项目提供接口,数据格式都为json,不过在过程中遇到一个小问题,代码如下:
情况一:
$tmp = array('a','b','c');
echo json_encode($tmp);
输出结果:['a','b','c']
情况二:
$tmp = array('a'=>'a','b'=>'b','c'=>'c');
echo json_encode($tmp);
输出结果:{'a':'a','b':'b','c':'c'}
问题出来了:
在二中,如果$tmp 可能为空的情况下,json_encode 后 输出的结果将是[]空数组
那么,这个接口在提供数据时就必须得分两种情况来考虑了:
数组为空时,接口输出的是空数组;
数组不为空时,接口输出的对象
解决方案:json_encode($tmp, JSON_FORCE_OBJECT) 不管在什么情况,接口永远输出对象,空数据及为{}
其实还有一个问题不知道原因:
在一,二两种情况中,为什么一种json_encode之后出来的是数组[],而二中出来的是对象{}
答案:
非连续的索引数组,在json_encode时都会被编码为object
这句话这么描述好像有些不妥
索引数组本来就是连贯的,应该是除了索引数组,其他数组(关联数组,多维数组)都会被编码为object。
情况一:
$tmp = array('a','b','c');
echo json_encode($tmp);
输出结果:['a','b','c']
情况二:
$tmp = array('a'=>'a','b'=>'b','c'=>'c');
echo json_encode($tmp);
输出结果:{'a':'a','b':'b','c':'c'}
问题出来了:
在二中,如果$tmp 可能为空的情况下,json_encode 后 输出的结果将是[]空数组
那么,这个接口在提供数据时就必须得分两种情况来考虑了:
数组为空时,接口输出的是空数组;
数组不为空时,接口输出的对象
解决方案:json_encode($tmp, JSON_FORCE_OBJECT) 不管在什么情况,接口永远输出对象,空数据及为{}
其实还有一个问题不知道原因:
在一,二两种情况中,为什么一种json_encode之后出来的是数组[],而二中出来的是对象{}
答案:
非连续的索引数组,在json_encode时都会被编码为object
这句话这么描述好像有些不妥
索引数组本来就是连贯的,应该是除了索引数组,其他数组(关联数组,多维数组)都会被编码为object。
相关文章推荐
- java中的String类型的对象为什么可以自动转换成Object类型的?而Object却要强制转换成String类型的
- JSON解析之JSONObject对象---js对象转换成java对象
- 将Json字符串转换为ASP对象(parse json string to asp object) 转载
- 利用Java反射实现普通对象到JSONObject的转换
- C#WPF无法将类型为“System.__ComObject”的 COM 对象强制转换为接口类型“System.Speech.Internal.SapiInterop.ISpDataKey”。解决办法
- Json convert to object with gjson.(Json 转换为类对象)
- Google-gson, 将JSON 转换为 Java 对象或者将Java对象转换成JSON 的Java库,可以在Android上使用
- 使用Java 语言可以方便的把任意对象转换成json格式的数据
- 自己编写的一个Json工具类,实现了反射将整个Object转换为Json对象的功能,支持Hibernate的延迟加载对象
- C# JsonObject Json格式与Json对象相互转换
- Spring的@RequestBody非常牛x,可以将提交的json直接转换成POJO对象。
- 无法将类型为“System.__ComObject”的 COM 对象强制转换为类类型“System.Data.SqlClient.SqlConnection的解决方法
- jquery转换json对象为字符串 JSON.stringify(jsonObject)
- 声明一个Object对象,然后强制转换成Dog类型并判断是否转换成功。
- 自己编写的一个Json工具类,实现了反射将整个Object转换为Json对象的功能,支持Hibernate的延迟加载对象
- 无法将类型为“Microsoft.SqlServer.Management.Smo.SimpleObjectKey”的对象强制转换
- 自己编写的一个Json工具类,实现了反射将整个Object转换为Json对象的功能,支持Hibernate的延迟加载对象[修订081217]
- java方式的将java对象以及list或者map转化为json数据,json转换为object或者map
- writeObject可以写n个,但是readObject()却只能读一次,你做一下测试。 如果你需要序列化好几个类的话,建议你用json;或者自己写两个方法,一个是将对象转换为字符串,一个是将字符串
- EXTJS学习系列基础篇:第四篇(转载)作者殷良胜,Ext中有两个很重要的方法,一个是decode;一个是encode.顾名思义,一个是编码,一个是解码,你难道真的这么想吗?严格的说,一个是将json字符串转换成对象;一个是将对象转换成json字符串