Dartでクラスのインスタンスの内容をJSONの文字列に変換したい場合は、dart:convert
ライブラリにありますJSON.encode()
を使用します。
しかし、クラスのインスタンスの各フィールドの内容を自動的にJSONの形へ変換することはできず、クラスの内容をどのようなJSONの形として変換させるかを、Map toJSON()
メソッドとして定義する必要があります。
import 'dart:convert';
class Hoge {
int value = 10;
String name = 'hogehoge';
Map toJson() => {'value': value, 'name': name};
}
main() {
Hoge hoge = new Hoge();
String jsonStr = JSON.encode(hoge);
print(jsonStr); // => {'value':10,'name':'hogehoge'}
}
toJson()
の内容を変えれば、フィールドに存在しない情報を追加することもできます。
Map toJson() => {'added_value': value + 10};
Map toJson() {
// JSONのMap生成時にロジックを組み込むことも可能
Map json = {};
if (value > 10) {
json['many'] = true;
} else {
json['many'] = false;
}
return json;
}