Problem mit json_encode ()

8

Ich habe ein einfaches Array:

%Vor%

Wenn ich das Array mit json_encode () codiere, bekomme ich folgendes:

%Vor%

Meine Frage ist, was ist der Grund dafür, ["Kum","Kumpel"] anstelle von { "0" : "Kum", "1" : "Kumpel" } zu bekommen?

    
cupakob 04.10.2009, 08:33
quelle

5 Antworten

22

"{}" Klammern spezifizieren ein Objekt und "[]" werden für Arrays gemäß der JSON-Spezifikation verwendet. Arrays haben keine Enumeration, wenn Sie sie aus der Perspektive der Speicherzuweisung betrachten. Es sind nur Daten gefolgt von mehr Daten, Objekte aus der anderen Hand haben Eigenschaften mit Namen und die Daten werden den Eigenschaften zugewiesen, daher müssen Sie, um ein solches Objekt zu codieren, auch die richtigen Eigenschaftsnamen übergeben. Aber für Array müssen Sie die Indizes nicht angeben, weil sie immer 0..n sein werden, wobei n die Länge des Arrays ist - 1, die einzige Sache, die zählt, ist die Reihenfolge der Daten.

%Vor%

Der Grund, warum JSON_FORCE_OBJECT die Verwendung von "0,1,2" vorschreibt, liegt darin, dass die Zuweisung von Daten zu object einer Eigenschaft zugewiesen werden muss, da keine Eigenschaftsnamen vom Entwickler angegeben werden (nur die Daten) Indizes als Eigenschaftsnamen, da dies die einzigen Namen sind, die einen Sinn ergeben.

Hinweis: Laut PHP-Handbuch sind die Optionen nur in PHP 5.3 verfügbar.

Ältere PHP-Versionen finden Sie in der Antwort von chelmertz für eine Möglichkeit, json_encode für die Verwendung von Indizes zu verwenden.

    
Maiku Mori 04.10.2009, 08:37
quelle
7

Wie Gumbo sagte, spielt es auf der JS-Seite keine Rolle. Versuchen Sie Folgendes, um PHP zu erzwingen:

%Vor%

Nicht so brauchbar, ich würde bei der Array-Notation bleiben.

    
chelmertz 04.10.2009 08:52
quelle
2

Einfach als Objekt darstellen und es wird gut funktionieren ... der JSON_FORCE_OBJECT -Parameter tut genau das gleiche.

%Vor%

Vergessen Sie nicht, es in ein PHP-Array umzuwandeln, damit Sie auf seine Werte in PHP zugreifen können:

%Vor%     
TaylorMac 15.07.2012 03:48
quelle
0

Da Sie ein PHP-Array nur mit numerischen Schlüsseln haben, müssen Sie kein JavaScript-Objekt verwenden. Aber wenn Sie einen brauchen, versuchen Sie Maiku Moris Vorschlag.

    
Gumbo 04.10.2009 08:43
quelle
0

Ich persönlich denke, das ist ein Bug, der in PHP behoben werden muss. JSON_FORCE_OBJECT ist absolut keine Antwort. Wenn Sie versuchen, irgendeine Art von generischer Programmierung zu machen, werden Sie ständig stolpern. Zum Beispiel ist folgendes PHP gültig:

Array ("0" = & gt; Array (0,1,2,3), "1" = & gt; Array (4,5,6,7));

Und sollte in

konvertiert werden

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

Aber PHP erwartet, dass ich entweder

akzeptiere

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

oder

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

Keine von beiden ist richtig. Wie kann ich ein Objekt so dekodieren? Welchen möglichen Grund gibt es, jemals etwas zu ändern, das eindeutig Zeichenfolgen als Indizes verwendet? Es ist, als ob PHP clever wäre, um idiotischen Leuten zu helfen, die Strings nicht von Ints unterscheiden können, aber dabei irgendjemanden, der legitimerweise Strings als Index verwendet, durcheinander bringt, ungeachtet dessen, in welchen Wert der Wert umgewandelt werden könnte.

    
Chris Nasr 16.05.2016 19:36
quelle

Tags und Links