#json #list #flutter #dart
Вопрос:
Итак, у меня есть данные в этом формате:
List users = [
{
"id": "p1",
"name": "John Doe",
"age": "44",
"imageUrl": [
{
"assets/images/anastasia-vityukova-unsplash-blackandwhiteimage.png",
"assets/images/anastasia-vityukova-unsplash.png",
}
],
"profession": "Financial Consultant"
},
{
"id": "p2",
"name": "John Doe2",
"age": "42",
"imageUrl": [
{
"assets/images/good-faces-hiba-unsplash-blackandwhiteimage.png",
"assets/images/good-faces-hiba-unsplash.jpg",
}
],
"profession": "Financial Consultant"
},
];
Как мне прочитать изображения?
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(lstUsers[index]["imageUrl"][0]),
fit: BoxFit.cover),
),
Комментарии:
1. попробуйте использовать
List<Map<String,String>>
вместоList
Ответ №1:
Вы можете видеть, что массив ImageUrl структурирован следующим образом:
"imageUrl": [
{
"assets/images/good-faces-hiba-unsplash-blackandwhiteimage.png",
"assets/images/good-faces-hiba-unsplash.jpg",
}
],
Первый элемент в массиве ImageUrl-это не строка, а набор (потому что он окружен фигурными скобками).
Если вы хотите получить доступ к первому активу в списке ImageUrl, удалите фигурные скобки и сделайте ImageUrl таким:
"imageUrl": [
"assets/images/good-faces-hiba-unsplash-blackandwhiteimage.png",
"assets/images/good-faces-hiba-unsplash.jpg",
],
// Now when you use that it will return a String
lstUsers[index]["imageUrl"][0];
Если вы хотите сохранить структуру списка таким же образом, и вы все еще хотите получить доступ к первому ImageUrl, вы можете использовать следующий синтаксис:
lstUsers[index]["imageUrl"][0].first;
Ответ №2:
Как говорится в ошибке, Dart рассматривает это поле как набор {}
или, более конкретно, как a LinkedHashSet
. Набор не реализует []
оператор, но вы можете получить доступ к его элементам с помощью метода elementAt
.
lstUsers[0]["imageUrl"][0].elementAt(1)
До тех пор, пока lstUsers[0]["imageUrl"][0]
вы не выберете первый элемент внутри массива, но обратите внимание, что массив состоит не просто из строк, а из одного набора со строками внутри него.
[{ "assets/images/anastasia-vityukova-unsplash-blackandwhiteimage.png",
"assets/images/anastasia-vityukova-unsplash.png", }]
Это причина, по которой вам нужно будет использовать .elementAt()
для доступа к строкам.
Я бы рекомендовал, если это в ваших силах, отбросить {}
все строки, чтобы к ним было легче получить доступ.
Или еще лучше создать классы, которые управляют сериализацией и десериализацией JSON. Хорошее место для начала-quicktype.