使用PHP在JSON中创建空对象的最佳方法?
要创建一个空的JSON对象,我通常使用:
json_encode((object) null);
将 null 转换为对象是有效的,但是此解决方案是否有任何其他可取的方法和/或任何问题?
要创建一个空的JSON对象,我通常使用:
json_encode((object) null);
将 null 转换为对象是有效的,但是此解决方案是否有任何其他可取的方法和/或任何问题?
文档指定这将导致一个空对象,因此有些人可能会说你的代码是有效的,它是要使用的方法。(object) null
如果将任何其他类型的值转换为对象,则会创建 stdClass 内置类的新实例。如果值为 NULL,则新实例将为空。
虽然你永远不知道什么时候/是否会改变上述内容,所以如果你想100%确定你总是会在你的编码数据中得到一个,你可以使用一个黑客,例如:{}
json_encode (json_decode ("{}"));
即使它是乏味和丑陋的,我确实假设/希望json_encode/json_decode彼此兼容,并且始终将以下评估为真:
$a = <something>;
$a === json_decode (json_encode ($a));
json_decode ("{}")
将返回每个默认值,使用下面的内容应因此被认为是安全的。但是,如前所述,这几乎与做 .stdClass
(object) null
json_encode (new stdClass);
如果你使用对象作为动态字典(我猜你这样做),那么我认为你想使用ArrayObject。
它映射到 JSON 字典,即使它是空的。如果您需要区分列表(数组)和字典(关联数组),那就太好了:
$complex = array('list' => array(), 'dict' => new ArrayObject());
print json_encode($complex); // -> {"list":[],"dict":{}}
您还可以无缝地操作它(就像使用关联数组一样),并且它将一直正确呈现到字典中:
$complex['dict']['a'] = 123;
print json_encode($complex); // -> {"list":[],"dict":{"a":123}}
unset($complex['dict']['a']);
print json_encode($complex); // -> {"list":[],"dict":{}}
如果您需要以两种方式100%兼容,您还可以进行换行,以便它返回而不是对象(您需要遍历结果树并递归替换所有对象,这是一项相当简单的任务)。json_decode
ArrayObjects
stdClass
咕噜咕噜。到目前为止,我只找到了一个:评估为。您需要查找匹配项并将其替换为 。is_array(new ArrayObject())
false
is_array
is_iterable