我正在尝试将json_encode输出为:{" match_all":{}}。 我写的示例程序是:
<?php
$qarray=Array("match_all"=>Array());
print_r(json_encode($qarray));
?>
但上面给出的是低于o / p: {&#34; MATCH_ALL&#34;:[]}
答案 0 :(得分:3)
您得到的结果是预期的,因为[]
表示JSON数组而不是JSON对象。如果你需要一个对象,你需要明确地提供一个例如
<?php
$qarray = Array("match_all"=>(object)Array());
print_r(json_encode($qarray));
然而,这没什么实际意义,因为当你给它关联数组时,Json编码会正确地创建对象。
<?php
$qarray = [ "match_all"=> [ "assoc" => true ] ];
print_r(json_encode($qarray));
打印:
{ “MATCH_ALL”:{ “ASSOC”:真}}
出于JSON编码的目的,关联数组是任何没有序列号作为索引的数组。
此外,在我看来,短数组语法在我看来更容易,但与使用Array()
答案 1 :(得分:3)
您想要的是object
而不是array
。这将生成您想要的输出。
$qarray = array("match_all" => new stdClass());
print_r(json_encode($qarray));
答案 2 :(得分:2)
PHP json_encode函数有选项标志作为第二个参数。 您可以将其设置为JSON_FORCE_OBJECT,然后获得您想要的结果。
试试这段代码。
<?php
$qarray=Array("match_all"=>Array());
print_r(json_encode($qarray, JSON_FORCE_OBJECT));
?>
答案 3 :(得分:0)
您应该指定这是一个对象,而不是数组:
$qarray=Array("match_all"=>(object) Array());
print_r(json_encode($qarray));
答案 4 :(得分:0)
作为其他提供答案的插件,如果你有多个值,那么每次将它们全部转换为对象会非常烦人,所以你可以很容易地在声明之后添加一个循环来将所有值设置为对象。
$qarray=Array("match_all"=>Array());
foreach($qarray as $key => $val) {
if(!is_array($val)) continue;
$qarray[$key] = (object)$val;
}
print_r(json_encode($qarray));
这使得代码更加动态,因为无论有多少个键,只要值是数组,它们的值都将在编码之前被设置为对象。
答案 5 :(得分:-1)
在PHP中,array
可以将字符串作为键(也称为关联数组),当JSON编码时,它将转换为JSON对象({}
)。但是,如果数组只有数字键,则数组被编码为JSON数组 - list
([]
)。
要创建一个空的JSON对象,您需要在PHP中创建一个空object
而不是空array
。
$qarray = ['match_all' => (object)[]];
print_r(json_encode($qarray));