使用PHP在JSON中创build空对象的最佳方法是什么?
要创build一个空的JSON对象,我通常使用:
json_encode((object) null);
将null赋值给一个对象是有效的,但是这个解决scheme有没有其他可取的方法和/或任何问题?
你的解决scheme可以工作
该文档指定(object) null
将导致一个空的对象,有些人可能会说,你的代码是有效的,它是使用的方法。
PHP:对象 – 手册
如果任何其他types的值被转换为对象,则会创build一个stdClass内置类的新实例。 如果该值为NULL,则新实例将为空。
..但是,尽量保持安全!
虽然你永远不知道上述情况将会发生什么变化,所以如果你想100%确定你的编码数据中总是会有一个{}
,你可以使用下面的方法:
json_encode (json_decode ("{}"));
即使它是单调乏味的,我假设/希望json_encode / json_decode是兼容的和其他人,总是会评估以下为真:
$a = <something>; $a === json_decode (json_encode ($a));
build议的方法
json_decode ("{}")
会默认返回一个stdClass
,使用下面的应该被认为是安全的。 虽然如前所述,它和(object) null
几乎是一样的。
json_encode (new stdClass);
如果你使用对象作为dynamic字典(我猜你会这样做),那么我想你想使用一个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
对象(你需要遍历结果树并recursion地replace所有的对象,这是一个相当简单的任务) 。
哎呀 。 只有一个我发现到目前为止: is_array(new ArrayObject())
计算结果为false
。 您可能需要在代码中查找并replaceis_array
(使用(($foo instanceof ArrayObject) || is_array($foo))
)。
那么, json_encode()
只是从PHP数组/对象/ etc返回一个string。 您可以通过以下方法更有效地达到相同的效果:
$json = '{}';
使用一个函数来完成这件事实在没有意义。
更新根据您的评论更新,你可以尝试:
$test = json_encode(array('some_properties'=>new stdClass));
虽然我不确定这比你所做的更好。
在PHP中使用JSON创build一个空对象
$json=json_decode('{}'); $json->status=202; $json->message='Accepted'; print_r($json);
其中产生
stdClass Object ( [status] => 202 [message] => Accepted )
这是必要的,因为以后我必须这样做
if(is_object($json))