JSON_FORCE_OBJECT混合对象和数组输出

kzmpq1sx  于 2022-12-01  发布在  其他
关注(0)|答案(3)|浏览(133)

我有一个PHP数据结构,我想用JSON编码。它可以包含许多空数组,其中一些需要编码为数组,一些需要编码为对象。
例如,假设我有这样的数据结构:

$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": []
}

有没有什么方法可以对数据进行编码(或者定义数组),这样我就可以得到混合的数组和对象?

x7rlezfr

x7rlezfr1#

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":[]}

OR通过类型转换:

$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":[]}
wn9m85ua

wn9m85ua2#

对于PHP5.4+,答案相同。

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

echo json_encode($foo);

再举一个简单的例子,其中有一点值得注意:

$icons = (object)["rain"=>["💧"], "sun"=>["🌞"], "lightrain"=>["🌦"]];
echo $icons->sun;
// 🌞

$icons = (object)["rain"=>"💧", "sun"=>"🌞", "lightrain"=>"🌦"];
echo $icons->sun;
// 🌞
ffscu2ro

ffscu2ro3#

答案是否定的。函数无法猜测您的意图,即哪些数组应该是array,哪些应该是object。您只需在json_encoding之前将所需的数组转换为object即可

相关问题