inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Flutter 앱 개발 기초

4장 Travia를 이용해서 다른 api에 적용 한줄 가져오려고합니다.

해결된 질문

509

what? just run

작성한 질문수 10

1

  Future<String> getNumberTrivia() async {
    // get 메소드로 URL 호출
    Response result = await Dio().get('https://api.adviceslip.com/advice');
    var trivia = result.data['advise']; // 응답 결과 가져오기
    print(trivia);
    return trivia;

4장 Travia를 응용해서

Json 원본 .. {"slip": { "id": 65, "advice": "When having a clear out"} //한줄 나오는데 분해가 안되네요...

두번째 값 문장만 가져 오려면 어떻게 해야하나요?" 이것도 json decode 해야하나요.

"When having a clear out"

 

 ./.....

Response result = await Dio().get('https://api.adviceslip.com/advice',
        queryParameters: {"slip": "advice"},);

//이해를 못한건지 .. 
쿼리를 넣엇는데 print {"slip": { "id": 224, "advice": "Don't drink bleach."}}
    Response result = await Dio().get('https://api.adviceslip.com/advice');
    final trivia = result.data; // 응답 결과 가져오기
    Map<String, dynamic> user = jsonDecode(trivia);
    print(user.runtimeType);
    print(user["slip"]);
    return trivia;

 _JsonMap

{id: 46, advice: Try going commando to an important meeting, NB: don't wear a skirt.}

 

    print(user["advice"]);   

 _JsonMap

Null

 

 

  {
    "slip": {
      "slip_id": "2",
       "advice": "Smile and the world smiles with you. Frown and you're on your own."
    }
  }
  

flutter

답변 1

2

DevStory

안녕하세요.

다음과 같은 응답을 반환하는 API에서 advice만 추출하는 방법을 알려드립니다.

{"slip": { "id": 117, "advice": "A common regret in life is wishing one hadn't worked so hard."}}

일단 최종 결과는 아래에 있는 getAdvice() 함수를 사용하면 advice 값만 뽑아오실 수 있습니다.

import 'dart:convert';

import 'package:dio/dio.dart';

void main() async {
  final advice = await getAdvice();
  print(advice); /// 최종 결과 : A common regret in life is wishing one hadn't worked so hard.
}

Future<String> getAdvice() async {
  final result = await Dio().get('https://api.adviceslip.com/advice');

  /// json format을 따르는 String
  final stringData = result.data;

  /// Map<String, dynamic>
  final data = jsonDecode(stringData);

  final advice = data['slip']['advice'];
  return advice;
}

강의에서 진행한 샘플 API에선 jsonDecode()를 직접 안해도 바로 접근이 가능했었는데, 위의 경우에는 jsonDecode()를 직접 명시해야 접근이 가능하여 헷갈리셨을 것 같습니다.

Dio는 API의 응답의 헤더(header) 영역에 content-typeapplication/json이라고 명시되어 있으면 자동으로 jsonDecode() 함수를 실행한 값을 반환하고 그렇지 않은 경우 문자열로 반환합니다.

헤더에 들어있는 값은 다음과 같이 확인할 수 있는데, 위 API는 content-typetext/html으로 넘어오고 있기에 단순 문자열로 넘어오게 됩니다. 따라서 jsonDecode()를 별도로 실행해 주셔야하고, 그 결과 Map<String, dynamic> 형태로 데이터를 다룰 수 있습니다.

final result = await Dio().get('https://api.adviceslip.com/advice');
print(result.headers);

문자열을 Map으로 변경하신 뒤 advice에 접근하기 위해선 먼저 slip 이라는 key로 advice가 속해있는 Map을 data['slip']이라고 명시하여 가져오고, 이후에 data['slip']['advice']라고 명시하여 advice를 가져오실 수 있습니다.

읽어보시고 설명이 더 필요하신 부분 있으면 언제든지 문의 남겨주세요
감사합니다 :)

 

1

what? just run

정말 감사합니다 . 혼자서는 하루 종일 구글링 해도 모르겠더군요 .

^^)b 감사합니다. 선생님

회차마다 있는 실습

1

38

2

user-not-found, wrong-password 코드가 더 이상 반환되지 않습니다

1

70

2

SharedPreferences prefs 초기화 시기 문제

1

84

2

index로 삭제하게 되면, index가 고정되어 있으니 문제가 발생하지 않나요?

1

62

2

API 사이트가 안되네요

1

77

2

잘 되다가 sharedPreferences부터 에러

1

63

2

기존의 프로젝트

1

63

2

I/O라는 창이 윈도우에서는 없어요

1

61

2

수강 기간 연장 부탁드립니다.

1

59

2

설정 질문

1

55

2

수강 기간 연장 신청 요청드립니다.

1

49

2

수강기간 연장 부탁드립니다.

1

54

2

수강기간 연장 부탁드립니다.

1

55

2

수강기간 연장 부탁 드립니다.^^

1

66

3

강의계획 문의

1

63

2

안녕하세요. 강의 연장 문의드립니다..

1

72

2

수강기간 연장 부탁드립니다!

1

78

2

2회차 StatefulWidget 예제 dartpad 코드와 영상에서의 코드가 다릅니다.

2

95

2

dartpad 에러

1

103

2

cmd에 flutter doctor 입력하면 바로 튕겨버립니다...

1

108

2

애뮬레이터 실행시 무한로딩

1

132

2

저는 강사님 처럼 화면이 안뜨는데 머테리얼 버전이 다른걸까요??

1

64

2

수강기간 연장 부탁드립니다!

1

58

2

수강기간 연장 부탁드립니다.

1

68

2