要创建一个空的 JSON 对象,我通常使用:
json_encode((object) null);
将 null 强制转换为对象是可行的,但是这个解决方案还有其他更好的方法和/或任何问题吗?
原文由 pna 发布,翻译遵循 CC BY-SA 4.0 许可协议
要创建一个空的 JSON 对象,我通常使用:
json_encode((object) null);
将 null 强制转换为对象是可行的,但是这个解决方案还有其他更好的方法和/或任何问题吗?
原文由 pna 发布,翻译遵循 CC BY-SA 4.0 许可协议
json_decode ("{}")
将返回一个 stdClass
默认情况下,使用以下应该被认为是安全/便携和正确的。
json_encode (new stdClass);
该文档指定 (object) null
将导致一个空对象,因此有些人可能会说您的代码是有效的并且它是使用的方法。
如果将任何其他类型的值转换为对象,则会创建 stdClass 内置类的新实例。如果值为 NULL,则新实例将为空。
..但是,尽量保证它的安全!
尽管您永远不知道上述内容何时/是否会改变,但如果您想 100% 确定您将始终在编码数据中得到 {}
您可以使用诸如:
$empty = json_decode ("{}");
$result = json_encode($empty); // "{}"
尽管它既乏味又丑陋,但我确实假设/希望 json_encode/json_decode 彼此兼容,并且总是将以下评估为真:
$a = <something>;
$a === json_decode (json_encode ($a));
原文由 Filip Roséen - refp 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答2.5k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
1 回答853 阅读✓ 已解决
2 回答540 阅读✓ 已解决
1 回答657 阅读✓ 已解决
945 阅读
2 回答574 阅读
如果您将对象用作动态字典(我猜您会这样做),那么我认为您想使用 ArrayObject 。
即使它是空的,它也会映射到 JSON 字典。 如果您需要区分列表(数组)和字典(关联数组),那就太好了:
您还可以无缝地操作它(就像您对关联数组所做的那样),它会继续正确地呈现到字典中:
如果您需要这 两种 方式 100% 兼容,您还可以包装
json_decode
以便它返回ArrayObjects
而不是stdClass
对象(您需要遍历结果树并递归替换所有对象,这是一项相当容易的任务)。问题。到目前为止,我只发现了一个:
is_array(new ArrayObject())
评估为false
。您需要使用is_array
查找并替换出现的is_iterable
。