Skip to main content

PHP json_encode return empty array [] instead of empty object {}

Problem:

Get below array for example. 

$status = array("message"=>"error","club_id"=>$_club_id,"status"=>"1","membership_info"=>array(),);

This array will be encoded in json format

echo json_encode($status);

This function return json:

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

Notice the empty array [], it is not consistent, it should be an empty object {}

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

The cause:

This problem is caused by the called function array(), which yields an empty array []

Solution:

There are 2 solutions for this issue:

Solution 1:Call new stdClass instead of array(), stdClass generates an empty object {}

Solution 2:The above solution is complex in case there are plenty of arrays to work with. If so, follow this simple solution: Developer just uses normal array() function and then use flag JSON_FORCE_OBJECT when encode the array:

json_encode($status, JSON_FORCE_OBJECT);

JSON_FORCE_OBJECT (integer)
Outputs an object rather than an array when a non-associative array is used. Especially useful when the recipient of the output is expecting an object and the array is empty. Available since PHP 5.3.0.


Comments

  1. Casino Slot Machines - JammyRocket | JCM Hub
    Casino Slot 부산광역 출장샵 Machines 통영 출장마사지 - JCM Hub offers the 속초 출장샵 latest in video slot machines, 오산 출장샵 classic slots and some new games to entertain guests. The Casino Slot 삼척 출장안마 Machine

    ReplyDelete

Post a Comment

Popular posts from this blog

Command Prompt VS 2010: Fix MSVCRT.lib(MSVCR100.dll) : error LNK2005: xxx already defined in LIBCMT.lib(xxx.obj)

One of my task is to use Command Prompt of Visual Studio 2010 to evaluate the assignments of students. This assignment is about pointer and memory management in C++. The students are required to use new and delete operator in C++ to manage the memory and they need to ensure that the number of new callings must be equal to the number of delete callings. I overload the new and delete operator, build it into a static library (.lib file) and require student to use this .lib file when implementing the assignment. There is no problem when building the .lib file in VS 2010 project, but there are errors when compile the source code if I link the source code to the above static .lib file. Here is the format of error: MSVCRT.lib(MSVCR100.dll) : error LNK2005: xxx already defined in LIBCMT.lib(xxx.obj) Fortunately, I found 2 ways to fix this error on the internet. The first one is to remove the default lib when compiling the source code, it's libcmt.lib, because this libcmt.lib alread...

Fix cross domain in ajax request

Follow this sample ajax request $.ajax({    "type": 'POST',    "url": url,     "crossDomain": true,    "data": params,    "dataType": 'json',    "async": false,    "success": function(data){ done_fn(data, is_test);    },    "error": function (jqXHR) { var data = $.parseJSON(jqXHR.responseText); $("#results").text(data.message);    } }); The keys are crossDomain: true and async: false Hope to help many people.