要创建一个空的JSON对象,我通常使用:
json_encode((object) null);
将null强制转换为对象有效,但是此解决方案是否还有其他更好的方法和/或任何问题?
要创建一个空的JSON对象,我通常使用:
json_encode((object) null);
将null强制转换为对象有效,但是此解决方案是否还有其他更好的方法和/或任何问题?
json_encode()
返回字符串,而不是对象。为什么这样 我在这里想念什么吗?
Answers:
该文档指定(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
。
jsonResponse = array()
然后由循环动态填充。如果循环没有单个迭代,则将“空”对象(或字典,如您所称)进行编码,[]
而将所有其他情况编码为“ {attr_1:value1,...} . All the other answers around here have a flaw. They assume that one already knows if the dictionary is empty or not in advance. Especially the answer that tells one should simply write
$ json = {}`和完全不使用json_encode是徒劳的
ArrayObject
实现以来iterable
,您既可以is_iterable($foo)
使用iterable
类型提示也可以使用类型提示,而array
无论如何,您都应该这样做,以使自己可以选择传递实例ArrayAccess
,例如。
好吧,json_encode()
只需从PHP数组/对象/等返回一个字符串。通过执行以下操作,您可以更有效地达到相同的效果:
$json = '{}';
使用函数来完成此操作实际上没有任何意义。
更新 根据您的评论更新,您可以尝试:
$test = json_encode(array('some_properties'=>new stdClass));
尽管我不确定这是否比您所做的更好。
json_encode($array, JSON_FORCE_OBJECT)
也会这样做。参见https://www.php.net/manual/en/function.json-encode.php
json_encode(['a', 'b'], JSON_FORCE_OBJECT)
会回来{"0": "a", "1": "b"}
你也可以使用
$var = ["key" => (object) array()];
json_encode($var);