Ich möchte in der Lage sein, eine Zeichenfolge für ein Objekt zu analysieren, auf das ich unter Verwendung der Punktnotation z. myobject.property, anstelle der Array-Notation z.B. Mein Objekt ['Eigenschaft']. Die Array-Notation funktioniert einwandfrei. Hier ist, was ich bisher habe.
Ich habe etwas XML:
%Vor%Was konvertiert zu JSON:
%Vor%Ich habe den folgenden Dart Code:
%Vor%welche die (gewünschte) Ausgabe erzeugen:
%Vor%Aber wenn ich es versuche:
%Vor%Ich bekomme Folgendes:
%Vor%Idealerweise möchte ich ein Objekt, auf das ich mit der Punktnotation zugreifen kann, und ohne dass der Compiler eine Warnung gibt, dass das Objekt keine Eigenschaft hat. Ich habe folgendes versucht:
%Vor%Aber anstatt mir 'level1name' wie erhofft zu geben, bekomme ich:
%Vor%Was mache ich hier falsch? Gibt es eine Möglichkeit, das zu tun, was ich versuche? Danke.
Momentan gibt JSON.parse nur Listen (array), Maps, String, num, bool und null zurück ( api ref ).
Ich vermute, dass, bis die Reflektion in die Sprache übergeht, es nicht in der Lage sein wird, Objekte basierend auf den in json gefundenen Schlüsseln neu zu konstruieren.
Sie könnten jedoch einen Konstruktor in Ihrem MyJsonObject erstellen, der intern eine Zeichenfolge namens JSON.parse verwendet und die verschiedenen Werte zugewiesen hat.
So etwas funktioniert im Dart-Editor:
%Vor%Eine nicht triviale Version würde einige Schleifen und mögliche Rekursion benötigen, wenn Sie tiefer verschachtelte Ebenen hätten.
Update: Ich habe eine nicht-triviale Version (inspiriert durch den Post unten) zusammengehackt, es ist oben auf github (nimmt auch Seths Kommentare für den Konstruktor):
Chris hat völlig Recht. Ich möchte nur hinzufügen, dass der JSON-Parser so modifiziert werden könnte, dass er ein wenig reicheres Objekt (etwas wie JsonMap
anstelle von reinem Map
) zurückgibt, das jsonObj.property
durch Implementierung von noSuchMethod
erlauben könnte. Das würde offensichtlich schlechter funktionieren als jsonObj['property']
.