왼쪽에 Dart를 붙여 넣고 "변환"을 누르세요 — JSON으로 바꿔 드립니다Dart 코드를 붙여 넣으세요

이 도구가 하는 일

Flutter 앱을 만드는 중인데 toJson()을 아직 작성하지 않은 모델 클래스가 있거나, 테스트용 샘플 JSON 바디가 필요할 때 Map을 손으로 짜는 건 귀찮습니다. Dart를 여기에 붙여 넣으면 유효한 JSON을 돌려드립니다. 보일러플레이트도, 다시 쓸 필요도 없습니다. 단일 클래스든, models.dart 파일 전체든, 명명된 인수로 만든 인스턴스든 모두 동작합니다.

변환기는 dart:convert가 실제로 직렬화하는 방식을 따릅니다. final 필드는 값 그대로 나옵니다. int, double은 JSON 숫자로 유지됩니다. bool은 그대로 불리언입니다. DateTime은 ISO-8601 문자열이 되는데, DateTime.toIso8601String()이 만들어 내는 포맷과 같습니다. List<T>는 JSON 배열, Map<String, dynamic>은 JSON 객체가 됩니다. nullable 타입(String?)은 값이 null이면 null, 아니면 그 값 자체를 내보냅니다.

팩토리 생성자, 이름 있는 생성자, fromJson/toJson 헬퍼는 모두 인식합니다. 실제 출력에 들어가는 건 인스턴스 안의 데이터입니다. 한 파일에서 여러 클래스를 그대로 붙여 넣으면(예: pub.dev 패키지에서 가져온 것) 각 클래스가 최상위 항목이 되고, 중첩된 인스턴스는 중첩 JSON 객체로 펼쳐집니다. 메서드는 건너뜁니다. enum은 기본적으로 이름으로 직렬화되며, 흔히 쓰는 describeEnum 관행과 맞춰져 있습니다.

사용 방법

세 단계면 끝입니다. 작은 클래스를 붙여 넣든 models.dart 전체를 붙여 넣든 흐름은 같습니다.

1

Dart 붙여 넣기(또는 샘플 사용)

왼쪽 에디터에 Dart 코드를 그대로 넣으세요. 클래스 정의, 팩토리 생성자, 여러 클래스, 명명된 인수가 있는 인스턴스 — 모두 괜찮습니다. 현실적인 예시가 궁금하다면 샘플 불러오기를 눌러 보세요.

import, 어노테이션(@JsonSerializable(), @freezed), 주석은 그대로 둬도 됩니다. 파서가 필요 없는 건 무시합니다. 언어 자체를 더 깊이 알고 싶다면 공식 레퍼런스인 dart.dev/language를 참고하세요.

2

변환 누르기

초록색 변환 버튼을 클릭합니다. 도구가 Dart를 읽고 클래스와 필드를 한 번에 훑어 JSON을 생성합니다. 동작 중에는 잠깐 로딩 표시가 나타납니다.

3

JSON 복사하기

오른쪽 패널이 들여쓰기된 JSON으로 채워집니다. Flutter 테스트, Dio/http용 모의 응답, Firestore 시드, API 문서에 바로 가져다 쓰세요.

실제로 쓸모 있는 순간

Flutter 통합 테스트

Order 모델에 Customer와 OrderItems가 중첩되어 있다고 해 봅시다. 클래스를 붙여 넣어 JSON을 얻고, 통합 테스트에서 모의 응답으로 씁니다.

API 페이로드 초안 만들기

CreateOrderRequest 클래스를 Postman, curl, 또는 백엔드 빠른 스파이크에 바로 쓸 수 있는 JSON 바디로 바꿔 줍니다. 더 이상 손으로 타이핑할 필요가 없습니다.

json_serializable 부트스트래핑

build_runner를 돌리기 전에 <code>toJson()</code>이 어떤 모양을 내놓을지 미리 확인할 수 있어, 새 모델을 설계할 때 도움이 됩니다.

문서와 코드 맞춰 두기

Dart 모델에서 바로 JSON 샘플을 만들어 README나 API 레퍼런스에 붙이면, 문서가 실제 코드를 따라가게 됩니다.

자주 묻는 질문

여러 클래스를 한꺼번에 붙여 넣어도 되나요?

네, 모델 파일 전체를 붙여 넣어도 됩니다. 최상위 클래스는 각자 JSON 항목이 되고, 중첩 인스턴스는 중첩 객체로 펼쳐집니다. 언더스코어로 시작하는 비공개 필드도 일반 toJson()과 마찬가지로 출력됩니다.

DateTime, Duration, nullable은 어떻게 처리하나요?

DateTimetoIso8601String() 규칙대로 ISO-8601 문자열로 나옵니다. Duration은 마이크로초 단위의 숫자입니다. nullable 필드(String?)는 값이 null이면 null, 아니면 값 자체를 내보냅니다.

List, Map, Set은 어떻게 되나요?

List<T>Set<T> 모두 JSON 배열이 됩니다. JSON에 Set 타입이 없어서 멤버가 나열되는 방식입니다. Map<String, dynamic>은 JSON 객체가 됩니다. 중첩 제네릭(List<Map<String, Order>>)도 재귀적으로 펼쳐집니다.

freezed나 json_serializable 클래스도 이해하나요?

네, @freezed@JsonSerializable 어노테이션을 인식해서 아래 필드를 JSON에 반영합니다. build_runner를 먼저 돌릴 필요 없이, 변환기가 생성 코드가 아닌 선언을 직접 읽습니다.

enum은 어떻게 출력되나요?

기본적으로 enum 값의 이름이 그대로 쓰입니다(OrderStatus.paid"paid"). 흔한 관행과 맞아떨어지고, 추가 매핑 코드 없이도 사람이 읽기 편한 JSON이 됩니다.

제 코드는 저장되나요?

Dart는 변환을 위해 백엔드로 전송되지만 저장되지 않습니다. 페이로드도 로깅하지 않습니다. 민감한 모델 코드라면 붙여 넣기 전에 한번 살펴보거나 정리하는 걸 권장합니다.

함께 쓸 만한 다른 도구

Dart to JSON은 한 조각일 뿐입니다. 아래 도구들과 잘 어울립니다.