ETC/Flutter

[flutter] Json 파싱하기

dkswnkk 2021. 10. 17. 00:34

HTTP 통신(get)을 통한 JSON 파싱 하기

import

http 패키지 사용을 위해 import를 해줘야 하는데 아래 코드의 1번 혹은 2번 코드로 import 해준다.

1. import 'package:http/http.dart';
2. import 'package:http/http.dart' as http; 
  • 1번과 같이 import 를 했을 경우 http 패키지 메소드들(get, post, put) 을 아무런 프리픽스 없이 아래와 같은 식으로 사용해야 한다.
    Resonse response = await get(Uri(parse('주소'));
  • 2번과 같이 as http 를 덧붙여 import 했을 경우, 패키지의 메소드들을 사용할 때 아래와 같이 http라는 프리픽스를 붙여주어 더욱 명확하게 사용할 수 있다.
    http.Response response = await http.get(Uri.parse('주소'));

Json parsing

void fetchData() async {
    try {
      http.Response response = await http.get(
        Uri.parse(
          'https://samples.openweathermap.org/data/2.5/weather?q=London&appid=b1b15e88fa797225412429c1c50c122a1',
        ),
      );
      String jsonData = response.body;
      var myJson = jsonDecode(jsonData)['weather'][0]['description'];
      print(myJson);
    } catch (e) {
      print('url 정보 불러오기 실패');
    }
  }

위는 예제 JSON 데이터를 받아오는 코드이다.

  • async를 해준 이유는httpget() 함수가 await 를 포함하고 있어, 비동기가 되기 때문이다.
String jsonData = response.body;

위 코드를 통해 get에 해당하는 url 의 데이터를 jsonData 담아 데이터를 사용한다.

원하는 값만 파싱 하기

만약 받아온 데이터에서 원하는 값만 뽑아내어 사용하고 싶다면, dart:convert 패키지 내의 jsonDecode 함수를 사용하여 쉽게 할 수 있다.

import 'dart:convert';

먼저 위와 같이 import를 해준다.

var myJson = jsonDecode(jsonData)['weather'][0]['description'];
print(myJson);

그다음 위와 같이 작성하여 원하는 값만 뽑아온다.