PHP Array to Json Object

55,766

Solution 1

You want to json_encode($json, JSON_FORCE_OBJECT).

The JSON_FORCE_OBJECT flag, as the name implies, forces the json output to be an object, even when it otherwise would normally be represented as an array.

You can also eliminate the use of array_push for some slightly cleaner code:

$json[] = ['ip' => $ip, 'port' => $port];

Solution 2

just use only

$response=array();
$response["0"]=array("ip"     => "192.168.0.1",
                     "port"   => "2016");
$json=json_encode($response,JSON_FORCE_OBJECT);

Solution 3

To get array with objects you can create stdClass() instead of array for inner items like below;

<?PHP

    $json = array();
    $itemObject = new stdClass();
    $itemObject->ip = "192.168.0.1";
    $itemObject->port = 2016;

    array_push($json, $itemObject);
    $json = json_encode($json, JSON_PRETTY_PRINT);
    echo $json;

?>

A working example http://ideone.com/1QUOm6

Solution 4

Just in case if you want to access your objectivitized json whole data OR a specific key value:

PHP SIDE

 $json = json_encode($yourdata, JSON_FORCE_OBJECT);

JS SIDE

 var json = <?=$json?>;
 console.log(json);            // {ip:"192.168.0.1", port:"2016"}
 console.log(json['ip']);      // 192.168.0.1
 console.log(json['port']);    // 2016

Solution 5

In order to get an object and not just a json string try:

$json = json_decode(json_encode($yourArray));

If you want to jsonise the nested arrays as well do:

$json =json_decode(json_encode($yourArray, JSON_FORCE_OBJECT));
Share:
55,766
Hassan Ila
Author by

Hassan Ila

Updated on October 20, 2022

Comments

  • Hassan Ila
    Hassan Ila over 1 year

    I need to convert a PHP array to JSON but I don't get what I expect. I want it to be an object that I can navigate easily with a numeric index. Here's an example code:

    $json = array();
    $ip = "192.168.0.1";
    $port = "2016";
    array_push($json, ["ip" => $ip, "port" => $port]);
    $json = json_encode($json, JSON_PRETTY_PRINT);
    // ----- json_decode($json)["ip"] should be "192.168.0.1" ----
    echo $json;
    

    This is what I get

    [  
       [  
          "ip" => "192.168.0.1",
          "port" => "2016"
       ]
    ]
    

    But I want to get an object instead of array:

    {  
       "0": {  
          "ip": "192.168.0.1",
          "port": "2016"
       }
    }
    
  • Hassan Ila
    Hassan Ila over 8 years
    Thanks but this is what I get: { "0": { "0": "ip => 192.168.0.1", "1": "port => 2016" } }
  • jbafford
    jbafford over 8 years
    Your strings are not quite on the right place in your array_push. Try array_push($json, ["ip" => $ip, "port" => $port]);
  • Tayyab Hayat
    Tayyab Hayat almost 3 years
    JSON_FORCE_OBJECT solve my issue, thanks