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