Как обрабатывать не-1000 * данные и десериализовать их во Flutter? - PullRequest
0 голосов
/ 14 апреля 2020

Я работаю над проектом во флаттере и пытаюсь использовать API для выбросов CO2. Конечная точка API может быть найдена здесь: http://www.hqcasanova.com/co2/?callback=callback. У меня проблемы с анализом данных, потому что они не действительны JSON. Есть ли способ справиться с этим неудобством?

Это текущий код, который у меня есть:

 Future<CO2Model> fetchCarbonEmissionData() async {
    var response = await http.get('http://www.hqcasanova.com/co2/?callback=callback/');
    RegExp exp = new RegExp(r"callback\((.*)\)");
    var match = exp.firstMatch(json.encode(response.body));
    print(match.group(0));
    try {
      if(response.statusCode == HTTP_SUCCESS_CODE) {
        var jsonData = jsonDecode(response.body);
        var data = jsonData['callback'];
        CO2Model instance = CO2Model.fromJSON(data);
        return instance;
      } else {
        print('failed');
      }
    } catch (e) {
      throw e;
    }
  }

Примечание. Выше я пытался использовать регулярные выражения для решения этой проблемы, но я не могу этого сделать.

1 Ответ

0 голосов
/ 14 апреля 2020

Я не предлагаю вам использовать регулярные выражения для такой простой задачи, особенно если вы уверены, что вы всегда получите что-то вроде

callback(...)

, вы можете просто обрезать пробелы и получить желаемую подстроку. Однако, если вы хотите сделать это с помощью регулярного выражения

r'callback\((.*).*\)'

Это в основном делает то, что я предлагал ранее, возьмите начавшееся совпадение со словом callback , затем сгруппируйте часть совпадения вы хотите в качестве вывода (исключая завершающие скобки). Надеюсь, это поможет.

...