2014-08-31 47 views
3

我在Dart中有一些類,我想要得到它們的格式化JSON表示。在Dart中格式化JSON的類結構

舉例來說,我已經得到了這些類:

class A { 
    String a1; 
    num a2; 
    List<B> bs; 
} 

class B { 
    String b1; 
    num b2; 
} 

一個格式化的A-對象的JSON應該是這樣的:

{ 
    "a1": "value", 
    "a2": 42, 
    "bs": [ 
    { 
     "b1": "any value", 
     "b2": 13 
    }, 
    { 
     "b1": "another value", 
     "b2": 0 
    } 
    ] 
} 

我在酒吧倉庫看了一些封裝,但找不到一個,符合我的需求。也許我錯過了正確的一個。

+0

你嘗試什麼套餐,什麼不適合? – 2014-08-31 10:10:12

+0

我試過[可導出](https://pub.dartlang.org/packages/exportable),[jsonx](https://pub.dartlang.org/packages/jsonx)和[dson](https:// pub .dartlang.org /包/ DSON)。我無法弄清楚,如何將縮進參數傳遞給它們的編碼函數。與此同時,我更改了jsonx包(將indent添加到私有編碼器變量中),但這不是必需的。如果沒有這種改變,我會聯繫作者。 – maiermic 2014-08-31 10:47:07

回答

4

如果這些類進行序列化和反序列化,但只是不正確地格式化JSON,則可以使用dart:convert包進行JSON和解碼/編碼並傳遞縮進字符串。

看到https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart-convert.JsonEncoder#id_JsonEncoder-withIndent

import 'dart:convert' show JSON, JsonEncoder; 

... 

String json = jsonFromSerializationLib(); 

print(new JsonEncoder.withIndent(' ').convert(JSON.decode(j))); 
+0

謝謝。這是一個短暫的解決方法,速度有點下降。 – maiermic 2014-08-31 11:34:38

+1

我想你只需要格式化輸出給用戶(打印或寫入文件)。我認爲還有其他事情會導致更多的延誤。 「縮進」是在幾周前推出的。我想序列化框架會在某個時候增加對它的支持(特別是當你創建一個功能請求時)。 – 2014-08-31 11:37:23

+1

沒錯。我不知道,「縮進」只是最近才引入的。我將創建一個功能請求。 – maiermic 2014-08-31 11:50:40