要创建一个空的JSON对象,我通常使用:
json_encode((object) null);
Run Code Online (Sandbox Code Playgroud)
将null转换为对象可以工作,但是这个解决方案还有其他更好的方法和/或任何问题吗?
Fil*_*efp 102
文档指定(object) null
将导致一个空对象,有些可能因此说你的代码是有效的,并且它是使用的方法.
如果将任何其他类型的值转换为对象,则会创建stdClass内置类的新实例.如果值为NULL,则新实例将为空.
虽然您永远不知道上述内容何时会发生变化,但如果您希望100%确定您将始终以{}
编码数据结尾,则可以使用以下方法:
json_encode (json_decode ("{}"));
Run Code Online (Sandbox Code Playgroud)
即使它很乏味和丑陋,我也会假设/希望json_encode/json_decode与其中一个兼容,并始终将以下内容评估为true:
$a = <something>;
$a === json_decode (json_encode ($a));
Run Code Online (Sandbox Code Playgroud)
json_decode ("{}")
将返回stdClass
默认值,如果认为安全,则使用以下内容.虽然如上所述,它与做的几乎完全相同(object) null
.
json_encode (new stdClass);
Run Code Online (Sandbox Code Playgroud)
wry*_*iel 73
如果你使用对象作为动态词典(我猜你这样做),那么我认为你想使用一个ArrayObject.
它映射到JSON字典,即使它是空的.如果你需要区分列表(数组)和字典(关联数组),那就太棒了:
$complex = array('list' => array(), 'dict' => new ArrayObject());
print json_encode($complex); // -> {"list":[],"dict":{}}
Run Code Online (Sandbox Code Playgroud)
您也可以无缝地操作它(就像使用关联数组一样),它将继续正确地渲染到字典中:
$complex['dict']['a'] = 123;
print json_encode($complex); // -> {"list":[],"dict":{"a":123}}
unset($complex['dict']['a']);
print json_encode($complex); // -> {"list":[],"dict":{}}
Run Code Online (Sandbox Code Playgroud)
如果你需要这两种方式100%兼容,你也可以包装json_decode
,使它返回ArrayObjects
而不是stdClass
对象(你需要遍历结果树并递归替换所有对象,这是一个相当容易的任务).
陷阱.到目前为止我找到的只有一个:is_array(new ArrayObject())
评估为false
.您可能需要is_array
在代码中查找和替换出现的内容(使用is_iterable
).
rdl*_*rey 17
好吧,json_encode()
只需从PHP数组/对象/等返回一个字符串.通过执行以下操作,您可以更有效地实现相同的效果:
$json = '{}';
Run Code Online (Sandbox Code Playgroud)
使用函数来实现这一点真的没有意义.
更新 根据您的评论更新,您可以尝试:
$test = json_encode(array('some_properties'=>new stdClass));
Run Code Online (Sandbox Code Playgroud)
虽然我不确定那比你做的更好.
使用PHP在JSON中创建一个空对象
$json=json_decode('{}');
$json->status=202;
$json->message='Accepted';
print_r($json);
Run Code Online (Sandbox Code Playgroud)
哪个产生了
stdClass Object
(
[status] => 202
[message] => Accepted
)
Run Code Online (Sandbox Code Playgroud)
这是必要的,因为后来我必须这样做
if(is_object($json))
Run Code Online (Sandbox Code Playgroud)
我总是这样做(Object)[];
,例如:
$json = (Object)[]; // [] could also be array()
Run Code Online (Sandbox Code Playgroud)
... 在 PHP 中玩转它 ...
$json = json_encode($json);
Run Code Online (Sandbox Code Playgroud)
...现在是真正的 JSON ...
json_encode($array, JSON_FORCE_OBJECT)
也会这么做。请参阅https://www.php.net/manual/en/function.json-encode.php
归档时间: |
|
查看次数: |
65797 次 |
最近记录: |