2014-09-13 110 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

相關問題