#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)),
);