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 MapmapData1 = {"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入門】基礎文法とサンプルコード集 |
コメント