web-dev-qa-db-ja.com

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"
   }
}

ありがとうございました :)

13
Hassan Ila

json_encode($json, JSON_FORCE_OBJECT)が必要です。

JSON_FORCE_OBJECT フラグは、名前が示すように、通常は配列として表される場合でも、json出力を強制的にオブジェクトにします。

少し簡潔なコードではarray_Pushの使用を排除することもできます。

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

ただ使うだけ

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

オブジェクトの配列を取得するには、次のような内部アイテムの配列の代わりに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

3
Cihan Uygun

念のため、オブジェクト化された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
1
MR_AMDEV

JSON文字列だけでなくオブジェクトを取得するには、次を試してください。

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

ネストされた配列もjsoniseしたい場合:

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