我有一个我希望JSON编码的PHP数据结构。它可以包含许多空数组,其中一些需要编码为数组,其中一些需要编码为对象。
例如,假设我有这样的数据结构:
$foo = array(
"bar1" => array(), // Should be encoded as an object
"bar2" => array() // Should be encoded as an array
);
我想将其编码为:
{
"bar1": {},
"bar2": []
}
但如果我使用json_encode($foo, JSON_FORCE_OBJECT)
,我会得到以下对象:
{
"bar1": {},
"bar2": {}
}
如果我使用json_encode($foo)
,我会得到数组:
{
"bar1": [],
"bar2": []
}
有没有办法对数据进行编码(或定义数组),以便获得混合数组和对象?
答案 0 :(得分:66)
将bar1
创建为new stdClass()
个对象。这将是json_encode()
区分它的唯一方法。可以通过调用new stdClass()
或使用(object)array()
$foo = array(
"bar1" => new stdClass(), // Should be encoded as an object
"bar2" => array() // Should be encoded as an array
);
echo json_encode($foo);
// {"bar1":{}, "bar2":[]}
或通过类型转换:
$foo = array(
"bar1" => (object)array(), // Should be encoded as an object
"bar2" => array() // Should be encoded as an array
);
echo json_encode($foo);
// {"bar1":{}, "bar2":[]}
答案 1 :(得分:0)
对于php7 +和php 5.4,答案相同。
$foo = [
"bar1" => (object)["",""],
"bar2" => ["",""]
];
echo json_encode($ foo);
答案 2 :(得分:-6)
答案是否定的。函数没有办法猜测你的意图是关于哪个数组应该是数组,哪个数组应该是对象。您应该在json_encoding它们之前简单地将所需的数组转换为对象