我有这个密码
$status = array(
"message"=>"error",
"club_id"=>$_club_id,
"status"=>"1",
"membership_info"=>array(),
);
第一个月
此函数返回json:{"message":"error","club_id":275,"status":"1","membership_info":[]}
但我需要这样的json:{"message":"error","club_id":275,"status":"1","membership_info":{}}
5条答案
按热度按时间44u64gxh1#
使用
json_encode
的JSON_FORCE_OBJECT
选项:Documentation
**JSON_FORCE_OBJECT(integer)**当使用非关联数组时,输出一个对象而不是数组。当输出的接收者期望一个对象而数组为空时特别有用。从PHP 5.3.0开始可用。
或者,如果你想保留你的对象中的“其他”数组,不要使用前面的答案,只要使用这个:
pw9qyyiw2#
通过将数组转换为对象,
json_encode
将始终使用大括号而不是括号来表示值(即使为空)。这在不能使用
JSON_FORCE_OBJECT
以及不能(或不想)使用实际对象作为值时非常有用。bq9c1y663#
在PHP中数组和“对象”(在JSON的意义上)没有区别。如果你想强制所有的数组都被编码为JSON对象,设置
JSON_FORCE_OBJECT
标志,从PHP 5.3开始就有了。参见http://php.net/json_encode。注意这将适用于 all 数组。或者,您可以在PHP代码中使用 objects 来代替数组:
也许在客户端处理空数组的边缘情况更简单。
hk8txs484#
我知道这是一个老问题,但它是谷歌上的第一个热门问题,所以我想我应该分享一个替代的解决方案。
在PHP 7+中,您可以使用
Map()
作为数据结构扩展的一部分,而不是使用标准的PHP数组。Documentation.Map对象将practically identical performance作为数组,并实现了ArrayAccess,因此可以将其作为常规数组进行访问。然而,与标准数组相反,它将始终是关联的,并按预期与
json_encode
一起工作。它还具有一些其他的小优点,如对象键和更好的内存处理。一些示例用法:
4szc88ey5#
虽然这可能不被认为是优雅的,但是一个简单的字符串替换可以有效地解决这个问题。
这缓解了
JSON_FORCE_OBJECT
将普通数组转换为对象的问题。