Как сохранить сложный ответ json от api в локальной базе данных во флаттере? - PullRequest
2 голосов
/ 09 июля 2020

Я хочу сохранить весь ответ json от api. Я пробовал хранить библиотеку SQFLITE, но мне не удалось сохранить полное json, так как его нужно хранить в табличном формате. Я новичок в трепетании. Может ли кто-нибудь предложить, как я могу этого добиться. Ниже я прилагаю свой образец json для справки.

{
  "result": {
    "allitems": {
      "answered_status": 0,
      "list_items": [
        {
          "is_answered": false,
          "options": [
            {
              "image_url": "assets/images/orders/jersey.jpg",
              "description": "Jersey",
              "title": "Jersey",
              "price": 23
            },
            {
              "image_url": "assets/images/orders/bat.png",
              "description": "Bat",
              "title": "Bat",
              "price": 5
            },
          ]
        }
      ],
      "no_of_items": 12,
      "title": "ALL"
    }

  },
  "status_code": 200
}

Ответы [ 2 ]

1 голос
/ 11 июля 2020

Я ошибся насчет SharedPreferences в своем комментарии. Оказывается, SharedPreferences не поддерживает Map<dynamic, dynamic>, а только до List<String>.

Таким образом, вы можете использовать пакет управления базой данных sembast, созданный тем же парнем, который сделано SQFLite.

Вы можете получить помощь с этой ссылкой для преобразования JSON объектов в Map и наоборот.

EDIT -

Вы можете сделать что-то вроде -

import 'package:sembast/sembast.dart';

Map<dynamic, dynamic> sampleMap;

// Skipping this part
sampleMap = // Retrive and convert JSON to Map

// A sample DB in the current directory
String dbPath = 'sample.db';
DatabaseFactory dbFactory = databaseFactoryIo;

// We use the database factory to open the database
Database db = await dbFactory.openDatabase(dbPath);

var store = intMapStoreFactory.store();

// Storing Map to DB
var key = await store.add(db, sampleMap);

// Retrieving values back
var record = await store.record(key).getSnapshot(db);

// From your provided sample JSON in question
var value = record["result"]["allitems"]["list_items"][0]["options"]["image_url"];

print(value);
// value = 'assets/images/orders/jersey.jpg'

Точно так же вы можете изучить документацию пакета для дополнительных операций с данными.

0 голосов
/ 11 июля 2020

Преобразуйте его в строку, вы можете сохранить в общих предпочтениях.

import 'dart:convert';
...
var s = json.encode(myMap);
// or var s = jsonEncode(myMap);

json.decode()/jsonDecode() makes a map from a string when you load it.
...