当php中的数组为空时,json_encode函数不返回大括号{}

Uma*_*Saw 31 php arrays json

我有这个代码

$status = array(
                "message"=>"error",
                "club_id"=>$_club_id,
                "status"=>"1",
                "membership_info"=>array(),
                );
Run Code Online (Sandbox Code Playgroud)

echo json_encode($status);

这个函数返回json:
{"message":"error","club_id":275,"status":"1","membership_info":[]}

但我需要像这样的json:

{"message":"error","club_id":275,"status":"1","membership_info":{}}

Tah*_*ksu 57

使用以下JSON_FORCE_OBJECT选项json_encode:

json_encode($status, JSON_FORCE_OBJECT);
Run Code Online (Sandbox Code Playgroud)

文档

JSON_FORCE_OBJECT(integer) 当使用非关联数组时,输出对象而不是数组.当输出的接收者期望一个对象并且该数组为空时特别有用.从PHP 5.3.0开始提供.

要么,

$status = array(
                "message"=>"error",
                "club_id"=>$_club_id,
                "status"=>"1",
                "membership_info"=> new stdClass()
                );
Run Code Online (Sandbox Code Playgroud)

也会做的伎俩.

  • 是的,问题是像[[“ one”]`这样的数组然后被转换为对象2,这是错误的。 (5认同)
  • 这里的答案回答了OP的问题。您需要查看其他答案以部分保留对象内的数组。 (2认同)
  • 底线:不要使用 JSON_FORCE_OBJECT(除非你想让你的普通数组被破坏/卷曲支撑)。并且在您的 JSON 树中,您必须验证每个对象节点是否为空并手动将其转换为对象或替换为 `new StdClass()` ... (2认同)

hum*_*ice 20

$status = array(
                "message"=>"error",
                "club_id"=>$_club_id,
                "status"=>"1",
                "membership_info"=>(object) array(),
                );
Run Code Online (Sandbox Code Playgroud)

通过将数组转换为对象,json_encode将始终使用大括号而不是括号作为值(即使为空).

当不能使用时JSON_FORCE_OBJECT以及当您不能(或不希望)使用实际对象作为值时,这非常有用.


dec*_*eze 7

PHP在数组和"对象"之间没有区别(在JSON的意义上).如果要强制将所有数组编码为JSON对象,请设置JSON_FORCE_OBJECT自PHP 5.3以来可用的标志.请参见http://php.net/json_encode.请注意,这将适用于所有阵列.

或者,您实际上可以在PHP代码中使用对象而不是数组:

$data = new stdClass;
$data->foo = 'bar';
...
Run Code Online (Sandbox Code Playgroud)

也许处理空数组客户端的边缘情况更简单.