web-dev-qa-db-fra.com

PHP Tableau vers objet Json

J'ai besoin de convertir un tableau PHP en json mais je n'obtiens pas ce que j'attends. Je veux que ce soit un objet que je puisse naviguer facilement avec un index numérique. Voici un exemple de 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;

Voilà ce que je reçois

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

Mais je veux obtenir un objet au lieu d'un tableau:

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

Merci :)

13
Hassan Ila

Vous voulez json_encode($json, JSON_FORCE_OBJECT).

Le JSON_FORCE_OBJECT flag, comme son nom l'indique, force la sortie json à être un objet, même s'il serait normalement représenté sous forme de tableau.

Vous pouvez également éliminer l'utilisation de array_Push pour un code légèrement plus propre:

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

utilisez seulement

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

Pour obtenir un tableau avec des objets, vous pouvez créer stdClass () au lieu d'un tableau pour les éléments internes comme ci-dessous;

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

?>

Un exemple de travail http://ideone.com/1QUOm6

3
Cihan Uygun

Juste au cas où si vous souhaitez accéder à vos données json entières objectivisées OR une valeur de clé spécifique:

PHP SIDE

 $json = json_encode($yourdata, JSON_FORCE_OBJECT);

CÔTÉ 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

Pour obtenir un objet et pas seulement une chaîne json, essayez:

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

Si vous souhaitez également jsoniser les tableaux imbriqués:

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