Прочтите файл json и проанализируйте ключ и значение данных, используя флаттер

В настоящее время я пытаюсь прочитать json из хранилища BLOB-объектов Azure, что у меня получается.

Теперь я хочу проанализировать данные и отобразить или распечатать их во Flutter (язык дартс). Ниже приведен код.

    Future<void> main() async {
     String sasUrl = 'blob file url sas token';
    try {
      // Send HTTP GET request to the SAS URL
      final response = await http.get(Uri.parse(sasUrl));
    

      if (response.statusCode == 200) {
      // Parse response body as bytes
      String responsebody  = response.body;

      List<String> lines = LineSplitter().convert(responsebody) ;
      
      lines.forEach((line) {
        Map<String, dynamic> jsonData = json.decode(line);
        print(jsonData);
        jsonData.forEach((key, value) {
          print('$key: $value');
        });
      });

      // Handle the data as needed
    } else {
      print('Failed to fetch data: ${response.statusCode}');
    }
  } catch (e) {
    print('Error fetching data: $e');
  }
}

Ошибка, которую я получаю, следующая

Ошибка при получении данных: ожидалось значение типа «Map<String, Dynamic>», но получено значение типа «Список».

Есть ли способ решить эту проблему? Я пробовал использовать кастинг, но не помогло.

конечные строки = LineSplitter().convert(тело ответа) как список; //попробуем этот способ

JB Jason 07.03.2024 14:45

все еще получаю ту же ошибку

sai 08.03.2024 06:06
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
2
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Во-первых, вам не нужно использовать разделитель строк для анализа json. Просто передайте response.body в jsonDecode.

И еще: после анализа json вы получаете список. Поэтому вы должны изменить эту строку

Map<String, dynamic> jsonData = json.decode(line);

к

Map<String, dynamic> jsonData = json.decode(response.body)[0];

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

 Future<void> main() async {
 String sasUrl = 'blob file url sas token;
try {
  // Send HTTP GET request to the SAS URL
  final response = await http.get(Uri.parse(sasUrl));


  if (response.statusCode == 200) {
  // Parse response body as bytes
  String responsebody  = response.body;

  
    Map<String, dynamic> jsonData = json.decode(responsebody)[0];
    print(jsonData);
    jsonData.forEach((key, value) {
      print('$key: $value');
    });
  

  // Handle the data as needed
} else {
  print('Failed to fetch data: ${response.statusCode}');
}


 } catch (e) {
    print('Error fetching data: $e');
  }
}

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

sai 08.03.2024 06:13

int tstls = int.parse(jsonData['TSTLS']); это строка, добавленная после jsonData.forEach((key, value) { print('$key: $value'); });

sai 08.03.2024 06:14

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

Shashank Shrivastava 09.03.2024 05:31

Другие вопросы по теме