2012-12-19 8 views
9

Na poniższym kodzieJak zdobyć JSON zserializowaną ciąg używając Dart serializacji

var address = new Address(); 
address.street = 'N 34th'; 
address.city = 'Seattle'; 
var serialization = new Serialization() 
..addRuleFor(address); 
String output = serialization.write(address); 

Jak uzyskać wyjście json tak:

address: {'street':'N 34th', 'city':'Seattle'} 

wyjściowe generowane przez powyższego kodu jest następujący:

{"roots":[{"__Ref":true,"rule":3,"object":0}],"data":[[],[],[],[["Seattle","N 34th"]]],"rules":"{\"roots\":[{\"__Ref\":true,\"rule\":1,\"object\":0}],\"data\":[[],[[{\"__Ref\":true,\"rule\":4,\"object\":0},{\"__Ref\":true,\"rule\":3,\"object\":0},{\"__Ref\":true,\"rule\":5,\"object\":0},{\"__Ref\":true,\"rule\":6,\"object\":0}]],[[],[],[\"city\",\"street\"]],[[]],[[]],[[]],[[{\"__Ref\":true,\"rule\":2,\"object\":0},{\"__Ref\":true,\"rule\":2,\"object\":1},\"\",{\"__Ref\":true,\"rule\":2,\"object\":2},{\"__Ref\":true,\"rule\":7,\"object\":0}]],[\"Address\"]],\"rules\":null}"} 
+2

+1 za korzystanie dart! –

Odpowiedz

0

Możesz użyć JsonObject for Dart, dodaj to do pliku pubspec.yaml, a następnie uruchom pub install (Narzędzia -> Pub Install)

dependencies: 
    json_object: 
    git: git://github.com/chrisbu/dartwatch-JsonObject.git 

a następnie zmień kod zadzwonić objectToJson:

import 'package:json_object/json_object.dart'; 

var address = new Address(); 
address.street = 'N 34th'; 
address.city = 'Seattle'; 
String output = objectToJson(address); 

Zauważ, że objectToJson wymaga lusterka wsparcie (możliwości odbicia), które działają tylko w Dart VM u za chwilę. Nie działa w dart2js od 2012-12-20.

+0

Dzięki za pomoc! – user1848653

0

Myślę, że chcesz pakiet dart: json zamiast serializacji. Dane wyjściowe z serializacji to JSON, ale jest to JSON serializowanych struktur i martwi to, że takie operacje, jak cykle obsługi, są przesadzone z tego, na co patrzysz. Z podstawowym pakietem json możesz zaimplementować metodę toJson(), która dokona transformacji, a podstawowe obiekty systemowe będą obsługiwane automatycznie. Ma tę zaletę, że nie wymaga lusterek, więc będzie działał na obecnych dartj2s. Lub możesz użyć json_object jak w poprzedniej odpowiedzi.

12

Okazuje się, że biblioteka dart:json to bardzo proste. Aby to zadziałało, musisz zaimplementować klasę toJson.

Na przykład:

class Address { 
    String street; 
    String city; 

    Map toJson() { 
    return {"street": street, "city": city}; 
    } 
} 

main() { 
    var addr = new Address(); 
    addr.street = 'N 34th'; 
    addr.city = 'Seattle'; 
    print(JSON.stringify(addr)); 
} 

Które wydrukować:

{"street":"N 34th","city":"Seattle"} 
+0

Hej Seth, nie rozumiem, czy 'JSON.stringfy' będzie szukał metody' Map.toJson() 'w twoim obiekcie? –

+0

JSON.stringify wywoła funkcję toJson() na twoim obiekcie, a toJson() musi zwrócić coś, co JSON wie jak kodować natywnie, jak int, string, bool, map, list, itd. –

+0

@SethLadd Jak to działa z Array/Lista? Załóżmy, że mam tę listę użytkowników: Współrzędne; w klasie adresu wewnętrznego, Jak mam pisać do Json'a –