Как использовать жестко запрограммированный ответ json в flutter

#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?