我们在使用json_encode的时候有的时候生成的json为[],有的情况会生成{}。这样就造成我们在js中解析是不同的。
如果PHP数组的键都是数字或者空数组,那么json_encode()返回一个数组形式的Json,如果PHP数组的键全是字符串。那么json_encode()就会返回一个对象形式的Json。两者在js中的调用是不同的。
事实上,只要在PHP数组的键中有一个字符串形式的键,那么json_encode()就会返回对象形式的Json一个对象,而对象是不可能以数字作为属性名的。
$array = array("name" => "Eric","age" => 23);
echo json_encode($array);
输出结果:{"name":"Eric","age":23} 为对象形式
$array = array(0 => "Eric", 1 => 23);
echo json_encode($array);
输出结果为:["Eric",23]
$array = array();
echo json_encode($array);
输出结果:[]
如果需要统一转换为对象类型,那就带上JSON_FORCE_OBJECT参数。
如果不需要转移中文,那就带上JSON_UNESCAPED_UNICODE参数。
补充:
对应的json_decode()解析json字符串为php变量:
json_decode($json_str,true);第二个参数的作用是如果为true解析对象形式的json串为php数组,否则解析的为对象格式