json_encode($b, JSON_FORCE_OBJECT) 可以强制转换成对象

最近在为移动端的项目提供接口,数据格式都为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。

时间: 2024-12-15 04:28:26

json_encode($b, JSON_FORCE_OBJECT) 可以强制转换成对象的相关文章

php 对象强制转换成数组

$result=(array)$receive[0]; //对象强制转换成数组 foreach ($result as $key => $value) { $newresult[$key]=array((array)$value); } var_dump($newresult); exit();

C语言 —— 打印不同对象的字节表示 ( 对int*强制转换成unsigned char*的理解 )

此文章参考<深入理解计算机系统>P31. 先看如下代码:  12345的十六进制表示为:0x00003039 1 #include <stdio.h> 2 3 int main() 4 { 5 int a = 12345; 6 char *q = (char *)(&a); 7 for(int i = 0; i < sizeof(a); ++i) 8 printf("%.2x ", q[i]); 9 return 0; 10 } 输出为: a的地址

求解:为什么父类没有的属性,在强制转换成子类后却有值了

foreach (M912 m912 in m912List) { var m934 = (M934)m912; //强制转换后,父类M912 中没有的属性m918List在转换后的子类m934中能访问且有值 } 说明:其中M912 是父类M934 是子类 m918List是子类M934的一个属性 疑问,为什么父类没有的属性,在强制转换成子类后却有值了,这种情况是如何实现的? ************************************ 问题:将子类实例赋值给父类的实例后,子类对象所

参数强制转换还是将参数的地址强制转换成线程参数

第一种方式:将传递的值,强制转换值的地址,然后在线程函数中,首先强制转换参数的类型,然后取值 DWORD WINAPI ThreadProc(LPVOID lpParam){ int i=(*(int*)lpParam);   //get the parameter from CreateThread function CreateThread(NULL,            NULL,      ThreadProc,      (LPVOID)i,**********      0,   

JAVA将数字字符串强制转换成整型变量----求参数之和实验代码

实验代码: package demo; public class CommandParameter {  /**  * @param args  */  public static void main(String[] args) {   // TODO Auto-generated method stub    int sum=0;                                                                             //设数值

浮点型float数据强制转换成int整型

问题:如下代码 想获取某两个Decimal类型数之间的商的大小,结果偶尔出错(请注意是 偶尔) Decima t1; Decima t2; int shang =Convert.ToInt32(t1 / t2) ; 解决方法:将Decimal类型数据强制转换成INT整型时  会有四舍五入的过程.如下,需要用Math.Truncate方法来取整数位.所以区商时必须用此方法取整 问题代码: Decima t1=1.2m; Convert.ToInt32(t1)  得到1 Decima t2=1.7m

在一般处理程序中,把Form Post过来的表单集合转换成对象 ,仿 MVC post,反射原理

using System; using System.Collections.Generic; using System.Collections.Specialized; using System.Linq; using System.Reflection; using System.Web; using WebSite.Models; namespace testWebuploader.Scripts.Plugin.webuploader_v0._1._2 { /// <summary> /

json转换成对象

在json转换成对象时,json的key会与java 类的字段一一对应.如果没有映射上的java字段会在该数据类型上填充默认值,如int 0,String null 等. 没有映射的json key在程序结束后会用警告显示出来,告知程序员那个key值没有被映射上 import net.sf.json.JSONObject; public class MainClass { public static void main(String[] args) { TestJsonBean(); } /**

json字符串转换成对象,对象转换成json字符串

方法一: 程序集:  System.Web.Extensions; 命名空间:System.Web.Script.Serialization; 最重要的类:JavaScriptSerializer //实例化 JavaScriptSerializer js = new JavaScriptSerializer(); js.Serialize();//将对象转换成json字符串:    序列号 js.Deserialize();//将json字符串转换成对象:  反序列化 方法二: 程序集:New