flutterで複雑なjson

flutterを触り始めた。

APIのレスポンスをjsonで受け取って処理していたところ、上手くいかなかったので、調べたことをメモ

 

https://medium.com/flutter-community/parsing-complex-json-in-flutter-747c46655f51

この記事が初心者にとてもやさしかった。

GithubにはAPIの扱いも書いてくれている。

以下に記事の内容をメモ。

 

初心者はまずjson:convertライブラリを使い、慣れて大きなプロジェクトになったらjson serializable などの generator ライブラリを使う。

 

シリアライズ:データを書くこと。オブジェクトなどに

シリアライズ:その逆

 

factory メソッドで受け取る引数の形を指定する必要があるが、jsonファイルは多くの場合key,valueの形が決まっていないので、複数の形を取る場合はそれをdynamicと表記する。

 

valueが一つの値の場合はいいが、ここでvalueにarrayが入ってくると複雑。

DartにはArray型がなくListしかない。ここはPythonに近い

そこでList<String>型を用意するが、プログラムはListの中身のデータ型が分かっておらず、List<dynamic>として認識しているので、ここでエラーが発生する。

type 'List<dynamic>' is not a subtype of type 'List<String>'

 

明示的にデータ型を教える必要がある。

var hoge = map_object["key"]

List<String> list = new List<String>.from(hoge)

といった具合。

 

"key" : [

  {"ho": 1},

  {"ge": 2}

]

 

みたいなパターンの例も、参考サイトに書いてある。