2016-05-22 11 views
0

JSON_FORCE_OBJECT ist ein Flag, das an die berühmte json_encode-Funktion in PHP übergeben wird.Gibt es eine Art von JSON_FORCE_ARRAY anstelle von JSON_FORCE_OBJECT?

Wie Dokumention sagt:

JSON_FORCE_OBJECT (integer) Gibt ein Objekt, anstatt ein Array wenn ein nicht assoziatives Array verwendet wird. Besonders nützlich, wenn der Empfänger der Ausgabe ein Objekt erwartet und das Array leer ist. Verfügbar seit PHP 5.3.0.

Ich konnte keine Flagge finden, um das Gegenteil zu erzwingen. Gibt es einen programmatischen Weg?

+0

Würde etwas wie 'json_encode (array_values ​​($ ar))' Ihren Bedürfnissen entsprechen? –

+0

Wenn Sie nicht JSON_FORCE_OBJECT Flag sagen, wird nicht assoziative Array als Array – splash58

+0

@JonStirling Es hat nicht funktioniert. Ich werde versuchen, ein Codebeispiel zu erstellen und zu der Frage hinzuzufügen. – Dorad

Antwort

1

Das Codieren eines Objekts als nicht assoziatives Array ist eine verlustreiche Operation. Die Objekteigenschaftsnamen/Array-Schlüssel sind verloren gegangen. Aus diesem Grund bietet json_encode() keine Möglichkeit, ein Objekt als nicht assoziatives Array zu codieren.

Seit PHP 5.4 kann Ihre Klasse die JsonSerializable Schnittstelle implementieren. Die von dieser Schnittstelle deklarierte Methode (jsonSerialize()) wird von json_encode() aufgerufen und gibt die Objektdaten zurück, die in die von json_encode() erzeugte Textdarstellung eingegeben werden müssen.

Wenn Sie nur die Werte von Eigenschaften eines Objekts (ohne die Eigenschaftsnamen) kodieren möchten, können Sie es wie folgt implementieren:

class MyClass implements JsonSerializable 
{ 
    public function jsonSerialize() 
    { 
     return array_values((array)$this); 
    } 
} 

Bitte beachten Sie, dass Sie nicht in der Lage sein wird, um das Objekt zu restaurieren (Verwendung von json_decode()) von der Ausgabe von json_encode(), weil einige Informationen während der Codierung verloren gingen (die Namen der Eigenschaften).

Verwandte Themen