I am trying to get expected json format after using json_encode($loc); in PHP.
$loc['location1'] = Array(
"city" =>"test",
"addr" => Array
(
"addr1"=> "test",
"addr2"=> "test"
),
);
expected json:
"location1": {
"city": "test",
"addr": {
"addr1": "test",
"addr2": "test"
}
}
instead of:
"0": {
"location1": {
"city": "test",
"addr": {
"addr1": "test",
"addr2": "test"
}
}
},
Please advise, thank you.
答案 0 :(得分:0)
首先,正如Leggendario所说,您的预期代码无效json。 要获得有效的json,它必须是一个值(如果它不是数字,则引用),对象或数组。
其次,根据您的代码得到与您的期望类似的内容,您可以这样做:
$loc = array(
"location1" => array(
"city" => "test",
"addr" => array(
"addr1"=> "test",
"addr2"=> "test"
),
)
);
然后致电:
json_encode($loc);
将输出:
{
"location1": {
"city": "test",
"addr": {
"addr1": "test",
"addr2": "test"
}
}
}
中查看您的json输出
所以基本上差异在于你作为参数传递给json_encode()
。
答案 1 :(得分:0)
stdClass和数组之间存在差异。 PHP中的stdClass是一个通用的空类。 在javascript中,这被定义为......
var obj = {};
数组是以数字索引0开头的值的索引。在javascript中,这定义为...
var array = [];
在javascript中,您不能以精确的方式拥有关联数组,您可以在PHP中定义它们。因此,如果在PHP中使用关联数组并使用json编码,则关联键的索引将为0。
$loc['location1'] in PHP becomes 0:[{'location'} etc...
解决方案是将其移至stdClass。最简单的方法是用stdClass替换数组,并使用(object)将数组转换为对象。
<?php
$loc = new stdClass;
$loc->location = (object) Array(
"city" =>"test",
"addr" => (object) Array
(
"addr1"=> "test",
"addr2"=> "test"
),
);
?>
这应该可以解决问题。