KO
내 도구

JSON을 Dart 클래스로 변환(Flutter)

JSON을 fromJson/toJson이 있는 널 안전 Dart 모델 클래스로 바꾸거나 json_serializable 어노테이션을 만듭니다. 중첩 클래스와 목록도 지원합니다.

Dart 코드
생성된 클래스 수
3

모든 샘플이 null이거나 샘플마다 값의 종류가 달라서 dynamic을 썼습니다. 실제 타입을 알게 되면 바꾸세요.

10.0처럼 쓴 숫자는 정수로 읽히므로, 샘플이 모두 그런 필드는 int가 됩니다. double이 필요하면 소수가 있는 샘플을 하나 넣으세요.

내 도구 →
광고

Flutter 앱은 JSON을 Dart 모델 클래스로 해독하는데, 필드, 생성자, fromJson, toJson을 손으로 쓰는 일은 느리고 실수하기 쉽습니다. API 응답 샘플을 붙여 넣으면 널 안전 Dart 클래스를 얻습니다. 중첩된 객체는 각각 클래스가 되고, 배열은 List<T>가 되며, 일부 샘플에서 null이거나 빠진 필드는 null 허용(T?)이 되고, snake_case 키는 camelCase 필드가 되면서도 올바른 JSON 키를 읽습니다. 패키지 없는 직접 작성 fromJson/toJson이나 코드 생성용 json_serializable 어노테이션 중에서 고를 수 있습니다.

사용 방법

  1. 대표적인 JSON 샘플을 붙여 넣습니다. 항목이 여러 개인 배열이 타입이 가장 정확합니다.
  2. 루트 클래스 이름을 입력합니다.
  3. 직접 작성한 fromJson/toJson, json_serializable, 필드만 중에서 고릅니다.
  4. 필드를 필요할 때만 null 허용으로 할지 항상 그렇게 할지, ISO 날짜 문자열을 DateTime으로 바꿀지 정합니다.
  5. 코드를 .dart 파일에 복사합니다(json_serializable은 build_runner를 실행).

계산식

정수 → int · 소수 → double · true/false → bool · 텍스트 → String · ISO 날짜 → DateTime · [ … ] → List<T> · { … } → 클래스

같은 위치에서 본 값은 합쳐집니다. int와 double은 double이 되고(num으로 읽으므로 JSON의 1도 형 변환에 실패하지 않음), 종류가 섞이면 dynamic이 됩니다. 일부 샘플에서 null이거나 일부 배열 항목에 없는 필드는 null 허용입니다. 같은 모양의 객체는 클래스 하나를 공유하며, 목록 항목 클래스는 키의 단수형으로 이름을 붙입니다(orders → Order). Dart 키워드나 dart:core 타입과 겹치는 이름에는 접미사가 붙습니다(class → classValue, Map → MapModel).

예시

예제 사용자로 클래스 세 개가 만들어집니다. User에는 final int id, String name, String email, bool isActive(is_active에서), double balance, DateTime createdAt, List<String> tags, Address address, List<Order> orders, 샘플에서 null인 dynamic manager가 있습니다. Order에는 String orderId, double total(59.9와 12가 합쳐져 double), int items, String? coupon이 있으며 쿠폰은 두 번째 주문에만 있어 null 허용입니다. fromJson은 json['order_id']를 읽고, toJson은 createdAt을 toIso8601String()으로 씁니다.

자주 묻는 질문

직접 작성과 json_serializable 중 무엇이 좋나요?

직접 작성한 fromJson/toJson은 패키지도 빌드 단계도 필요 없어 작은 모델에 알맞습니다. json_serializable은 build_runner로 같은 코드를 어노테이션에서 생성하며, 모델이 자주 바뀔 때 유지하기 쉽습니다.

필드의 타입이 dynamic인 이유는 무엇인가요?

모든 샘플이 null이었거나, 숫자와 텍스트처럼 종류가 섞여 있기 때문입니다. 실제 값이 있는 샘플을 붙여 넣거나 타입을 직접 지정하세요.

double 필드가 (json['x'] as num).toDouble()을 쓰는 이유는 무엇인가요?

JSON은 12와 12.0을 구별하지 않아서 jsonDecode가 정수에는 int를 돌려줍니다. 바로 double로 형 변환하면 예외가 나지만, num을 거치면 둘 다 받아들입니다.

내 JSON이 업로드되나요?

아닙니다. 클래스는 브라우저에서 만들어집니다.

출처

최종 업데이트:

인용·퍼가기
APA

kakaoCalc. (2026, November 8). JSON을 Dart 클래스로 변환(Flutter). https://kakao.mobile/ko/tools/json-to-dart-pojo-generator/

MLA

“JSON을 Dart 클래스로 변환(Flutter).” kakaoCalc, 8 Nov. 2026, kakao.mobile/ko/tools/json-to-dart-pojo-generator/.

광고