Question

J'ai un tableau simple:

array
  0 => string 'Kum' (length=3)
  1 => string 'Kumpel' (length=6)

quand j'encode le tableau à l'aide json_encode (), je reçois ce qui suit:

["Kum","Kumpel"] 

Ma question est, quelle est la raison de se ["Kum","Kumpel"] au lieu de { "0" : "Kum", "1" : "Kumpel" }?

Était-ce utile?

La solution

« {} » entre parenthèses indiquent un objet et « [] » sont utilisés pour les réseaux selon la spécification JSON. Les tableaux ne sont pas l'énumération, si vous regardez du point de vue de l'allocation de mémoire. Il est juste des données suivies de plus de données, objets d'autre part ont des propriétés avec des noms et les données sont affectées aux propriétés, donc de coder cet objet, vous devez également transmettre les noms de propriété corrects. Mais pour le tableau que vous n'avez pas besoin de spécifier les index, car ils seront toujours 0..n, où n est la longueur du tableau - 1, la seule chose qui compte est l'ordre des données.

$array = array("a","b","c");
json_encode($array); // ["a","b","c"]
json_encode($array, JSON_FORCE_OBJECT); // {"0":"a", "1":"b","2":"c"}

La raison pour laquelle il JSON_FORCE_OBJECT Foces à utiliser « 0,1,2 » est parce que pour affecter des données à obeject vous devez l'affecter à une propriété, car aucun nom de propriété sont donnés par le développeur (uniquement les données) utilise l'encodeur tableau index les noms de propriété, car ce sont les seuls noms qui ont un sens.

Remarque: selon manuel PHP les options paramètres ne sont disponibles à partir de PHP 5.3

Pour les anciennes versions de PHP se référer à la réponse de chelmertz un moyen de faire json_encode d'utiliser des index.

Autres conseils

Comme l'a dit Gumbo, sur le côté JS il ne sera pas question. Pour forcer PHP en elle, essayez ceci:

$a = new stdClass();
$a->{0} = "Kum";
$a->{1} = "Kumpel";
echo json_encode($a);

Non pas utilisable, je bâton avec la notation de tableau.

Il suffit de jeter comme un objet et cela fonctionnera très bien ... le paramètre JSON_FORCE_OBJECT fait exactement la même chose.

json_encode((object)$array);

Ne pas oublier de le reconvertir en un tableau de php afin que vous puissiez accéder à ses valeurs en php:

$array = (object)$array;
$array = (array)$array;

json_encode($array);

Puisque vous avez un tableau PHP avec les touches numériques juste, il n'y a pas besoin d'utiliser un objet JavaScript. Mais si vous en avez besoin, essayez la suggestion de Maiku Mori.

Je pense personnellement que c'est un bug qui doit être corrigé en PHP. JSON_FORCE_OBJECT est absolument pas une réponse. Si vous essayez de faire toute sorte de programmation générique vous obtenez trébuché en permanence. Par exemple, ce qui suit est valide PHP:

array ( "0" => array (0,1,2,3), "1" => array (4,5,6,7));

devrait être converti en

{ "0": [0,1,2,3], "1": [4,5,6,7]}

Pourtant, PHP me attend d'accepter

[[0,1,2,3], [4,5,6,7]]

ou

{ "0": { "0": 1, "1": 1, "2": 2 "3": 3}, "1": { "0": 4, "1": 5 , "2": 6 "3": 7}}

Ni dont sont juste du tout. Comment puis-je décoder peut-être un objet comme ça? Quelle raison est là pour toujours changer quelque chose qui utilise clairement des chaînes comme indices? Il est comme PHP a été d'essayer d'être intelligent pour aider les personnes idiotes qui ne peuvent pas se différencier des chaînes de ints, mais dans le processus foiré toute personne qui utilise légitimement des chaînes comme index, peu importe ce que la valeur pourrait être transformé en.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top