#json #flutter #dart
#json #flutter #dart
Вопрос:
как я могу использовать этот жестко запрограммированный ответ json на экране flutter и использовать его для получения списка объектов country, чтобы я мог использовать этот список в качестве элементов списка для выпадающего списка. У меня есть ответ json под рукой, и я просто хочу использовать его жестко запрограммированным в моем файле dart.
Мой ответ Json
[
{
"id": 1,
"code": "AF",
"dial_code": " 93",
"name": "افغانستان"
},
{
"id": 2,
"code": "AX",
"dial_code": " 358",
"name": "Åland"
},
{
"id": 3,
"code": "AL",
"dial_code": " 355",
"name": "Shqipëria"
},
...
]
То, что я делал до сих пор, использовало этот метод Future для извлечения объектов country в виде списка и возврата его. вот мой фрагмент.
List<CountryModel> _countryList = new List<CountryModel>();
Future<List<CountryModel>> _fetchCountries() async {
//
setState(() {
isLoading = true;
});
pr.show();
String jsonString = '''[
{
"id": 1,
"code": "AF",
"dial_code": " 93",
"name": "افغانستان"
},
{
"id": 2,
"code": "AX",
"dial_code": " 358",
"name": "Åland"
},
{
"id": 3,
"code": "AL",
"dial_code": " 355",
"name": "Shqipëria"
},
]
''';
http.Response response = http.Response(jsonString, 200);
if (response.statusCode == 200) {
setState(() {
isLoading = false;
});
_countryList = countryModelFromJson(response.body);
pr.hide();
return _countryList;
// return countryModelFromJson(response.body);
} else {
setState(() {
isLoading = false;
});
pr.hide();
// _showSnackbar(, clr)
throw Exception();
}
}
Когда я пытаюсь это сделать, это выдает мне эту ошибку, которую я не знаю, как решить.
Unhandled Exception: Invalid argument (string): Contains invalid characters.: " {n
как можно достичь того, что мне нужно выше, и исправить это?
После небольшого исследования я нашел это решение. Это был вопрос кодировки символов в Юникоде.
Добавьте приведенный ниже фрагмент внутри ответа ()
headers: {
HttpHeaders.contentTypeHeader: 'application/json; charset=utf-8',
}
Решение
http.Response response = http.Response(jsonString, 200, headers: {
HttpHeaders.contentTypeHeader: 'application/json; charset=utf-8',
});
Ответ №1:
Удалите конечную запятую в вашем файле json:
String jsonString = '''[
{
"id": 1,
"code": "AF",
"dial_code": " 93",
"name": "افغانستان"
},
{
"id": 2,
"code": "AX",
"dial_code": " 358",
"name": "Åland"
},
{
"id": 3,
"code": "AL",
"dial_code": " 355",
"name": "Shqipëria"
}
]
''';
после последнего объекта в массиве.
Комментарии:
1. в моем полном коде json. в конечном объекте вообще нет запятой. Я вставил «…», чтобы имитировать, что это еще не все.
Ответ №2:
Пожалуйста, проверьте свой JSON с помощью любого средства проверки json перед использованием в коде.
Загрузка JSON из файла
String data = await DefaultAssetBundle.of(context).loadString("assets/data.json");
final jsonResult = json.decode(data);
Рабочий прототип
String json = '''[
{
"id": 1,
"code": "AF",
"dial_code": " 93",
"name": "افغانستان"
},
{
"id": 2,
"code": "AX",
"dial_code": " 358",
"name": "Åland"
},
{
"id": 3,
"code": "AL",
"dial_code": " 355",
"name": "Shqipëria"
}
]''';
List<Map<String,dynamic>> user = List<Map<String,dynamic>>.from(jsonDecode(json)).toList();
print(user[1]); // {id: 2, code: AX, dial_code: 358, name: Åland}
Комментарии:
1. могу ли я сохранить этот json в файле .json и использовать его для выполнения вышеуказанных действий? если да, то как я могу это сделать?
2. спасибо, это хорошо работает. и хотя я получаю эту ошибку «Необработанное исключение: недопустимый аргумент (строка): содержит недопустимые символы.:»
3. вы проверили json?
4. да, я так и сделал, он по-прежнему выдает эту ошибку. возможно, некоторые страны вставлены в их местный язык. если да, то как я могу это решить?
5. локальный язык здесь не должен быть проблемой. можете ли вы поделиться файлом JSON?