我刚刚创建了一个小程序来检查JSON和JSON_FORCE_OBJECT
$tree = [
0 => array
(
'id' => 1,
'parent' => '0',
'name' => 'b',
'surname' => 'myfolder/b'
),
1 => array
(
'id' => 2,
'parent' => 1,
'name' => 'ignore',
'surname' => 'myfolder/ignore2'
),
2 => array
(
'id' => 3,
'parent' => 1,
'name' => 'ignore2',
'surname' => 'myfolder/ignore4'
)
];
var_dump($tree);
$try = json_encode($tree);//To print with key. Also if we decode we get result as object
//echo $try;
echo '<br />';
$try2 = json_decode($try,JSON_FORCE_OBJECT);
var_dump($try2);
$ try2完全等于$ tree一个关联数组。
而如果我从此行中删除JSON_FORCE_OBJECT
$try2 = json_decode($try,JSON_FORCE_OBJECT);
我得到一个带有子对象的数组。虽然JSON_FORCE_OBJECT
应该与json_encode一起使用但是与json_decode一起使用,但我得到了一个令人惊讶的结果。我无法理解里面发生了什么?我想当我编码并解码它时我应该得到相同的结果。但是只有在我使用JSON_FORCE_OBJECT
时才得到相同的结果。谁能帮助为什么会这样呢?
答案 0 :(得分:1)
根据手册:http://php.net/manual/en/function.json-decode.php
json_decode
如果要在objects
中转换它们,则会返回assoc array
数组,您应该指定第二个参数boolean
JSON_FORCE_OBJECT
是int
,其值为16
...
当这个被传递为第二个参数php
时,将其转换为其等同于true
的bool等。
要测试上述行为,请尝试:
var_dump((bool)1; (bool)2, (bool)16)
//output bool(true) bool(true) bool(true) .
var_dump((bool)0)
//outputs bool(false)
所以这与JSON_FORCE_OBJECT
无关......甚至
json_decode($try,true);
json_decode($try,2);
json_decode($try,3);
json_decode($try,4);
json_decode($try,'someVar');
....
//should return your expected result (assoc array)
同样,如果你传递0
作为第二个参数,PHP会将其转换为bool
(false
)并返回object
json_decode($try,0);
json_decode($try,false);
json_decode($try,null)
json_decode($try)
...
//will return objects
答案 1 :(得分:1)
json_decode
的第二个参数是布尔值。它接受true
或false
。它不接受JSON_FORCE_OBJECT
。您试图使用错误的常量来处理错误的函数。
json_decode
&#39> 4th 参数接受常量的位掩码,但目前它只支持JSON_BIGINT_AS_STRING
。
如果要从stdClass
返回JSON对象的json_decode
个实例,请将其第二个参数设置为false
(默认值)。将其设置为任何非假值都会使其返回关联数组而不是对象。将其设置为JSON_FORCE_OBJECT
计为&#34; not-falsey&#34;。
手册中描述了所有内容:http://php.net/json_decode