PHP json_encode - JSON_FORCE_OBJECT混合对象和数组输出

时间:2012-07-26 13:39:25

标签: php json

我有一个我希望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": []
}

有没有办法对数据进行编码(或定义数组),以便获得混合数组和对象?

3 个答案:

答案 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它们之前简单地将所需的数组转换为对象