DartでJSON(文字列)をオブジェクトに変換する方法についてソースコード付きでまとめました。
【Dart】JSON(文字列) -> オブジェクト
dart:convertに含まれるJsonCodecクラスのdecodeメソッドを使って、JSON文字列からオブジェクトへ変換します。
【サンプルコード】Dart
サンプルプログラムのソースコードです。
import 'dart:convert';
void main() {
String stringData = "Excalibur";
int intData = 114514;
List listData = ["Saver", 123, "Excalibur", 456];
Map mapData = {"Saver":"Altria", "List":["x", 10], "Map":{"key":"value"}};
// オブジェクト(String, Int, List, Map)をJSON文字列(String)へ変換
String stringJsonData = json.encode(stringData);
String intJsonData = json.encode(intData);
String listJsonData = json.encode(listData);
String mapJsonData = json.encode(mapData);
// JSON文字列を表示
print( stringJsonData ); // "Excalibur"
print( intJsonData ); // 114514
print( listJsonData ); // ["Saver",123,"Excalibur",456]
print( mapJsonData ); // {"Saver":"Altria","List":["x",10],"Map":{"key":"value"}}
// JSON文字列(String)を オブジェクト(String, Int, List, Map)に変換
String stringData2 = json.decode(stringJsonData);
int intData2 = json.decode(intJsonData);
List listData2 = json.decode(listJsonData);
Map mapData2 = json.decode(mapJsonData);
// デコードで復元したオブジェクトを表示
print( stringData2 ); // Excalibur
print( intData2 ); // 114514
print( listData2 ); // [Saver, 123, Excalibur, 456]
print( mapData2 ); // {Saver: Altria, List: [x, 10], Map: {key: value}}
}
decodeメソッドはJSON文字列に応じた型を返します。
【注意】Map型のオブジェクトをJSON文字列へ変換する際の制約
Map型をJSON文字列へ変換するには、キーがString型である必要があります。
つまり、キーをObject型やint型などにすると変換できず、エラーが出ます。
import 'dart:convert';
void main() {
// キーがString型ならOK
Map mapData1 = {"key1": "value", "key2": 123};
String mapJsonData1 = json.encode(mapData1);
print(mapJsonData1); // {"key1":"value","key2":123}
// キーがString型ならError
Map mapData2 = {10: "value1", 20: "value2"};
String mapJsonData2 = json.encode(mapData2);
print(mapJsonData2);
/*
Unhandled exception:
Converting object to an encodable object failed: _LinkedHashMap len:2
#0 _JsonStringifier.writeObject (dart:convert/json.dart:647:7)
#1 _JsonStringStringifier.printOn (dart:convert/json.dart:834:17)
#2 _JsonStringStringifier.stringify (dart:convert/json.dart:819:5)
#3 JsonEncoder.convert (dart:convert/json.dart:255:30)
#4 JsonCodec.encode (dart:convert/json.dart:166:45)
#5 main (file:///C:/prog/flutter/a/test.dart:11:30)
#6 _startIsolate. (dart:isolate-patch/isolate_patch.dart:301:19)
#7 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:172:12)
*/
}
| – | 関連記事 |
|---|---|
| 1 | ■【Flutter入門】iOS、Android、Windowsアプリ開発 |
| 2 | 【Dart入門】基礎文法とサンプルコード集 |

コメント