Как рабоать с json во flutter
у меня есть json файл хранящийся локально
[
{
"id": 1,
"name": "Электрическая зубная щетка",
"category": "Бытовая техника",
"title": "Комплектация \n 1x - электрическая зубная щетка RIDGEN \n 6x - стандартные насадки с щетиной DuPont x6 \n 1x - насадка для языка \n 1x - насадка для межзубной чистки \n 1x - Защитная крышка для головки щетки \n 1x - USB-кабель для зарядки \n 1x - Дорожний футляр \n 1x - Книга инструкций на русском",
"score": 4.9,
"image": ["https://ir-2.ozone.ru/s3/multimedia-o/wc1000/6574932660.jpg", "https://ir-2.ozone.ru/s3/multimedia-i/wc1000/6225254862.jpg", "https://ir-2.ozone.ru/s3/multimedia-j/wc1000/6225254863.jpg", "https://ir-2.ozone.ru/s3/multimedia-f/wc1000/6225254895.jpg", "https://ir-2.ozone.ru/s3/multimedia-2/wc1000/6225254882.jpg"],
"price": 1680
},
{
"id": 2,
"name": "Толстовка FutureMan",
"category": "Одежда",
"title": "Сезон: Зима \n Материал: Полиэстер \n Состав материала: 91% полиэстер, 9% эластан \n Коллекция: Осень-зима 2023 \n Стиль: Повседневный",
"score": 2.6,
"image": ["https://ir-2.ozone.ru/s3/multimedia-0/wc1000/6734850048.jpg", "https://ir-2.ozone.ru/s3/multimedia-2/wc1000/6734850050.jpg", "https://ir-2.ozone.ru/s3/multimedia-z/wc1000/6734850047.jpg"],
"price": 2576
},
{
"id": 3,
"name": "BMW вело Велосипед Горный, Городской, bmvv21s",
"category": "Спорт и отдых",
"title": "Целевая аудитория: Взрослая \n Размер рамы, дюймы: 17 \n Диаметр колес, дюймы: 26 \n Материал рамы: Сталь \n Размер рамы, см: 17",
"score": 3.3,
"image": ["https://ir-2.ozone.ru/s3/multimedia-1-y/wc1000/7043118658.jpg", "https://ir-2.ozone.ru/s3/multimedia-1-j/wc1000/7032096847.jpg", "https://ir-2.ozone.ru/s3/multimedia-1-d/wc1000/7032096841.jpg", "https://ir-2.ozone.ru/s3/multimedia-1-c/wc1000/7032096840.jpg", "https://ir-2.ozone.ru/s3/multimedia-1-h/wc1000/7032096845.jpg"],
"price": 14450
},
{
"id": 4,
"name": "Кофемашина Xiaomi Scishare Smart Capsule Coffee Machine Mini Green",
"category": "Бытовая техника",
"title": "Кофемашина поддерживает подачу кофе в чашки с объемом от 25 до 180 мл. \n Обеспечивается быстрое приготовление напитка с ярко выраженным вкусом. \n Устройство обладает компактными размерами и универсальным дизайном, \n поэтому будет гармонично смотрится на фоне любого интерьера. Вы всегда \n сможете насладиться ароматным кофе!",
"score": 4.9,
"image": ["https://ir-2.ozone.ru/s3/multimedia-t/wc1000/6828727781.jpg", "https://ir-2.ozone.ru/s3/multimedia-1/wc1000/6828727789.jpg", "https://ir-2.ozone.ru/s3/multimedia-6/wc1000/6828727758.jpg", "https://ir-2.ozone.ru/s3/multimedia-c/wc1000/6816108648.jpg", "https://ir-2.ozone.ru/s3/multimedia-e/wc1000/6816108650.jpg"],
"price": 8128
},
{
"id": 5,
"name": "Эмоциональный интеллект. Почему он может значить больше, чем IQ.",
"category": "Книги",
"title": "Новая яркая cepия бecтceллepoв МИФа, пpoдaнных тиpaжом бoлee 1,5 млн экземпляров. Книги изданы в удобном формате покетбука и стильном дизайне. \n В серию входит более 50 самых популярных книг по саморазвитию, психологии, бизнесу.",
"score": 2.1,
"image": ["https://ir-2.ozone.ru/s3/multimedia-b/wc1000/6652919711.jpg", "https://ir-2.ozone.ru/s3/multimedia-1-5/wc1000/6922324193.jpg"],
"price": 342
},
{
"id": 6,
"name": "Перчатка для вычесывания шерсти кошек и собак",
"category":"Товары для животных",
"title": "Перчатка расческа для вычесывания шерсти животных собирает вылинявшую шерсть, \n массирует кожу вашего любимца и может помочь удалить даже самые запутанные колтуны у собак и кошек",
"score": 4.8,
"image": ["https://ir-2.ozone.ru/s3/multimedia-4/wc1000/6532854508.jpg","https://ir-3.ozone.ru/s3/multimedia-v/wc1000/6532854499.jpg", "https://ir-3.ozone.ru/s3/multimedia-d/wc1000/6437242117.jpg", "https://ir-3.ozone.ru/s3/multimedia-b/wc1000/6439266899.jpg", "https://ir-3.ozone.ru/s3/multimedia-4/wc1000/6532854508.jpg"],
"price": 293
},
{
"id": 7,
"name": "Парфюмерный - флакон кулон из Опала",
"category": "Аксессуары",
"title": "Материал: Опал \n Натуральность камня: Натуральный камень \n Месторождение: Мексика",
"score": 1.1,
"image": ["https://ir-3.ozone.ru/s3/multimedia-1-y/wc1000/7056377386.jpg", "https://ir-3.ozone.ru/s3/multimedia-1-g/wc1000/7056377404.jpg", "https://ir-3.ozone.ru/s3/multimedia-1-1/wc1000/7056377389.jpg"],
"price": 832
},
{
"id": 8,
"name": "Маршмеллоу мини цветной Guandy (Гуанди) фруктовый",
"category": "Продукты питания",
"title": "Без жира. Без глютена. Без лактозы. Без яичного белка.",
"score": 3.2,
"image": ["https://ir-3.ozone.ru/s3/multimedia-6/wc1000/6324711330.jpg", "https://ir-3.ozone.ru/s3/multimedia-1-u/wc1000/6997981350.jpg", "https://ir-3.ozone.ru/s3/multimedia-1-j/wc1000/7091107903.jpg", "https://ir-3.ozone.ru/s3/multimedia-1-o/wc1000/6923491548.jpg"],
"price": 261
}]
И есть dart код в который мне нужно подставить значения из этого json
Cards(
width: Sizes.bigWidth,
height: Sizes.bigHeight,
category: "",
score: 4.9,
price: 123,
productName: "Название товара",
img:
"https://ir-3.ozone.ru/s3/multimedia-6/wc1000/6324711330.jpg",
)
Подскажите пожалуйста как это сделать, целый день убил на это не понимаю как реализовать, первый раз сталкиваюсь с json
Ответы (1 шт):
Автор решения: Falchio
→ Ссылка
Прочитать файл с json
из ассетов:
String data = await DefaultAssetBundle.of(context).loadString("assets/data.json");
final List<dynamic> jsonResult = jsonDecode(data);
Реализовать Serializing JSON inside model classes.
в данном случае:
Cards.fromJson(Map<String, dynamic> json)
:width: Sizes.bigWidth,
height: Sizes.bigHeight,
category: json['category'] as String,
score: json['score'] as double,
price: json['price'] as double,
productName: json['name'] as String,
//ссылки наверное лучше хранить не ввиде строк, хотя конечно на Ваше усмотрение.
img: List<Uri>.from(json['image'].map((v) => Uri.parse(v)).toList(growable: false));
Далее преобразуем json
в список объектов:
final List<Cards> cards = jsonResult
.map((card)=>Cards.fromJson(card))
.toList();
Вроде должно работать.