44

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

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

4

3 回答 3

82

创建bar1new 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":[]}
于 2012-07-26T13:41:49.153 回答
1

对于 php7+ 和 php 5.4,答案相同。

$foo = [
  "bar1" => (object)["",""],
  "bar2" => ["",""]
];

回声 json_encode($foo);

于 2018-09-14T18:22:33.137 回答
-6

答案是否定的。该函数无法猜测您的意图,即哪个数组应该是数组,哪些应该是对象。您应该在 json_encoding 之前简单地将您想要的数组转换为对象

于 2012-07-26T13:42:18.010 回答