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 :)
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];
utilisez seulement
$response=array();
$response["0"]=array("ip" => "192.168.0.1",
"port" => "2016");
$json=json_encode($response,JSON_FORCE_OBJECT);
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
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
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));