web-dev-qa-db-ja.com

SQFLiteまたはMoorライブラリーを使用してJSONデータをフラッターでデータベーステーブルに格納する方法

Flutterアプリのデータベースに文字列のリストを挿入するにはどうすればよいですか、json配列を文字列にエンコードして文字列データ型に保存しようとしましたが、skill配列では毎回明示的なデコードが必要です。データベース。

List<User> userResponse = await tempDatabase.allItems;
      jsonData = Result.fromJson({
        "name": userResponse[0].name,
        "skills": jsonDecode(userResponse[0].skills)
      });

これは私のjson応答です

{
  "result": [
    {
      "name":"Sidhant Rajora",
      "skills": [
        "C++",
        "Java",
        "Python",
        "React"
      ]
    },
    {
      "name":"Adity Rajora",
      "skills": [
        "C++",
        "Java",
        "Python"
      ]
    }
  ]
}

この種のJSON応答があり、それによって作成されたモデルPODOは

class UsersJson {
  List<Result> result;

  UsersJson({this.result});

  UsersJson.fromJson(Map<String, dynamic> json) {
    if (json['result'] != null) {
      result = new List<Result>();
      json['result'].forEach((v) {
        result.add(new Result.fromJson(v));
      });
    }
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    if (this.result != null) {
      data['result'] = this.result.map((v) => v.toJson()).toList();
    }
    return data;
  }
}

class Result {
  String name;
  int id;
  List<String> skills;

  Result({this.name, this.skills});

  Result.fromJson(Map<String, dynamic> json) {
    name = json['name'];
    skills = json['skills'].cast<String>();
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['name'] = this.name;
    data['skills'] = this.skills;
    return data;
  }
}

そして今、私はモデルをデータベースに挿入してデータベースから取り戻すためのアプローチについて確信が持てません。 SQFLiteライブラリとムーアライブラリ( https://moor.simonbinder.e )を使用してみました

3
Sidhant Rajora

湿原ではTypeConverterを使用できます。任意のタイプをサポートされている係留列タイプに変換します。たとえば、jsonを文字列化して、TextColumnに格納できます。 方法についてはドキュメントを参照してください 。しかし、深くネストされたjsonデータを使用すると、エンコードとデコードが少し難しくなる可能性があります。

1
Newton Munene

Flutter、SQLite、Moorなどの学習中に私が対処している同様の問題があります。そして、私のために機能しているのを見ることができる唯一の解決策は、2つの別個のテーブルを結合することです。1つのテーブルには名前とIDが含まれ、もう1つのテーブルには2種類のID、各スキルの一意の識別子、および束をリンクする1つの「グループ化」IDが含まれますそれらの最初のテーブルに。したがって、あなたの場合は次のようになります:

enter image description here

1
Reda Lazri