2014-09-13 23 views
4

在将Dart编码/解码为JSON之前,我询问question,但是,建议的库并不完整,我决定手动处理它。Dart将列表转换为JSON编码的映射条目

目标是将这些对象转换为地图。

class Parent extends Object { 
    int id; 
    String name; 
    List<Child> listChild = new List<Child>(); 
    Map toMap() => {"id":id, "name":name, "listChild":listChild}; 
} 

class Child extends Object { 
    int id; 
    String childName; 
    Map toMap() => {"id":id, "childName":childName}; 
} 

在做

print(JSON.encode(parent.toMap())); 

我看到它去这里,任何建议如何使这项工作?

if (!stringifyJsonValue(object)) { 
    checkCycle(object); 
    try { 
    var customJson = _toEncodable(object); 
    if (!stringifyJsonValue(customJson)) { 
     throw new JsonUnsupportedObjectError(object); 
    } 
    _removeSeen(object); 
    } catch (e) { 
    throw new JsonUnsupportedObjectError(object, cause : e); 
    } 
} 
} 

回答

0

只需重命名Map toMap()Map toJson(),它会正常工作。 =)

void encode() { 
    Parent p = new Parent(); 
    Child c1 = new Child(); 
    c1 ..id = 1 ..childName = "Alex"; 

    Child c2 = new Child(); 
    c2 ..id = 2 ..childName = "John"; 

    Child c3 = new Child(); 
    c3 ..id = 3 ..childName = "Jane"; 

    p ..id = 1 ..name = "Lisa" ..listChild = [c1,c2,c3]; 

    String json = JSON.encode(p); 
    print(json); 
} 

class Parent extends Object { 
    int id; 
    String name; 
    List<Child> listChild = new List<Child>(); 
    Map toJson() => {"id":id, "name":name, "listChild":listChild}; 
} 

class Child extends Object { 
    int id; 
    String childName; 
    Map toJson() => {"id":id, "childName":childName}; 
} 
+0

,解决了我的问题。我一直在努力找到一些关于转换API的文档,它清楚地提到了对json转换的对象,你能分享你从中得到的链接吗? – javapadawan 2014-09-14 16:34:22

+0

嗨,很高兴听到它帮助!我认为我查看了json.dart的源代码以查明,但我不再确定:https://chromiumcodereview.appspot.com/10914009/patch/7001/6002 – Dafen 2014-09-14 18:35:52

+0

该文档位于JSON.encode:https ://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart-convert.JsonCodec#id_encode。它指出任何不直接对应于JSON文字(num/String/bool/null/List/Map)的对象都将通过toEncodable函数发送。您可以将'JSON.encode(p)'更改为'JSON.encode(p,(x)=> x.toMap())',它应该适用于具有toMap方法的对象。 – lrn 2014-09-15 12:59:25

2
Map toMap() => {"id":id, "name":name: "listChild": listChild.map((c) => c.toJson().toList())}; 

是有效的JSON。

import 'dart:convert' show JSON; 

... 

String json = JSON.encode(toMap()); 

您还可以使用​​回调 - 参见How to convert DateTime object to json

+0

嗨@Gunter,我修改我的问题。我尝试了你的建议,但得到一个例外。 – javapadawan 2014-09-13 22:00:51

+0

什么例外。你能否添加细节? – 2014-09-14 07:02:44

+0

它的问题。 JsonUnsupportedObject。 – javapadawan 2014-09-14 07:39:59

相关问题