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"
}
}
ありがとうございました :)
json_encode($json, JSON_FORCE_OBJECT)
が必要です。
JSON_FORCE_OBJECT
フラグは、名前が示すように、通常は配列として表される場合でも、json出力を強制的にオブジェクトにします。
少し簡潔なコードではarray_Push
の使用を排除することもできます。
$json[] = ['ip' => $ip, 'port' => $port];
ただ使うだけ
$response=array();
$response["0"]=array("ip" => "192.168.0.1",
"port" => "2016");
$json=json_encode($response,JSON_FORCE_OBJECT);
オブジェクトの配列を取得するには、次のような内部アイテムの配列の代わりに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;
?>
念のため、オブジェクト化されたJSONデータ全体にアクセスする場合は、OR特定のキー値:
PHP SIDE
$json = json_encode($yourdata, JSON_FORCE_OBJECT);
JSサイド
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
JSON文字列だけでなくオブジェクトを取得するには、次を試してください。
$json = json_decode(json_encode($yourArray));
ネストされた配列もjsoniseしたい場合:
$json =json_decode(json_encode($yourArray, JSON_FORCE_OBJECT));