Как рабоать с 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();

Вроде должно работать.

→ Ссылка