кодирование в формате json (список объектов) — строка для декодирования (список объектов)

#json #flutter #dart

#json #flutter #dart

Вопрос:

Мой список слишком длинный. Итак, я кодирую и сохраняю его в базе данных. Я хочу его декодировать. Как мне это сделать?

способ кодирования,

 String shoppingCartToJson(List<ShoppingCartModel> data) => jsonEncode(data.map((i) => i.toMap()).toList()).toString();
  

Как декодировать?

Я пытался, но возвращаемый тип String не является списком объектов

 List<ShoppingCartModel> shoppingFromJson(String str) => jsonDecode(str);
  

Комментарии:

1. вы получили json из какого-то внешнего удаленного API, верно? почему вообще вы хотели бы использовать jsonEncode ? вы хотите передать его другим клиентам?

2. Локально создается этот список. Я сохраняю список в своей базе данных. (Список слишком длинный, поэтому я его кодирую). Мне нужно декодировать его, когда мне это нужно. Вы поняли это, сэр? Извините за мой плохой английский

3. нет, вам не нужно ничего кодировать: если в вашем списке 1000 элементов, сохраните в своей базе данных 1000 строк, а не одну огромную кодированную строку

4. Я храню данные в firestore. Firestore 1 документ означает 1 МБ, верно?. Поэтому мне нужно ее декодировать… Кстати, это поле в моем существующем пользовательском документе

5. Можете ли вы сказать мне, как декодировать в список объектов?

Ответ №1:

В вашем ShoppingCartModel классе у вас должны быть функции для encode и decode , для типа и от dynamic соответственно.

Итак, ваш ShoppingCartModel класс должен выглядеть так (при условии, что параметры внутри класса):

 class ShoppingCartModel {
  
  String itemId;
  String itemName;
  double quantity;
  
  ShoppingCartModel.fromJson(Map<String, dynamic> json) {
    if (json == null) return;
    itemId = json['item_id'];
    itemName = json['item_name'];
    quantity = json['quantity'];
  }
  
  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['item_id'] = this.itemId;
    data['item_name'] = this.itemName;
    data['quantity'] = this.quantity;
    return data;
  }
  
}
  

И тогда вы можете encode и decode с помощью:

Кодирование:

 json.encode(data);
  

Декодирование:

 List<dynamic> decodedData = json.decode(strData);

List<ShoppingCartModel> dataDecodedList = List<ShoppingCartModel>.from(
  dataDecoded.map((x) => ShoppingCartModel.fromJson(x)),
);