PHP-массив для объекта Json

Мне нужно преобразовать массив PHP в json, но я не понимаю, чего я ожидаю. Я хочу, чтобы это был объект, с которым я могу легко перемещаться с помощью числового индекса. Вот пример кода:

$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;

Это то, что я получаю

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

Но я хочу получить объект вместо массива:

{  
   "0": {  
      "ip": "192.168.0.1",
      "port": "2016"
   }
}

Спасибо:)

Ответ 1

Вы хотите json_encode($json, JSON_FORCE_OBJECT).

Значок JSON_FORCE_OBJECT, как следует из названия, заставляет выход json быть объектом, даже если он обычно был бы представлен как обычно как массив.

Вы также можете исключить использование array_push для немного более чистого кода:

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

Ответ 2

просто используйте только

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

Ответ 3

Чтобы получить массив с объектами, вы можете создать stdClass() вместо массива для внутренних элементов, как показано ниже;

<?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;

?>

Рабочий пример http://ideone.com/1QUOm6

Ответ 4

На всякий случай, если вы хотите получить доступ к вашим объективным данным JSON целиком ИЛИ конкретному значению ключа:

PHP SIDE

 $json = json_encode($yourdata, JSON_FORCE_OBJECT);

JS SIDE

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

Ответ 5

$ip   = "192.168.0.1";
$port = "2016";
$json = array("response" => array("ip" => $ip, "port" => $port)); 
//IF U NEED AS JSON OBJECT
$json = [array("ip" => $ip, "port" => $port)]; //IF U NEED AS JSON ARRAY
$json = json_encode($json);
echo $json;

Ответ 6

Чтобы получить объект, а не только строку json, попробуйте:

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

Если вы хотите также jsonise вложенные массивы:

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