Scala → JSON 변환기
Scala case class나 객체를 붙여넣으세요. 깔끔한 JSON을 돌려드립니다.
이 도구가 하는 일
필드가 수십 개 있는 Scala case class가 있고, 이에 맞는 JSON 페이로드가 필요하다면 — 테스트용이든, API 호출용이든, Kafka 메시지 fixture용이든 — 직접 손으로 만드는 건 금방 지겨워집니다. Scala를 여기에 붙여넣으면 유효한 JSON이 바로 나옵니다. case class 하나든, 여러 개가 담긴 파일이든, 이름있는 인자로 만든 전체 인스턴스든 — 동일한 흐름, 동일한 결과입니다.
이 변환기는 주요 Scala JSON 라이브러리가 내놓는 결과를 그대로 맞춥니다. Circe, Play JSON, uPickle은 모두 case class의 필드를 JSON 키로 바꿔 직렬화하는데, 여기서 나오는 것도 정확히 그것입니다. Int, Long, Double, BigDecimal은 JSON 숫자가 됩니다. Boolean은 그대로 불리언입니다. Option[A]는 Some(x)일 때 값이 되고, None일 때 null이 되거나 생략됩니다. Instant, LocalDateTime, 기타 java.time 타입은 ISO-8601 문자열로 출력됩니다.
컬렉션은 직관적인 매핑을 따릅니다. List, Seq, Vector, Set은 모두 JSON 배열이 됩니다. Map[String, A]는 JSON 객체가 됩니다. 튜플은 여러 타입이 섞인 JSON 배열이 됩니다. case class를 자식으로 두는 sealed trait(ADT)을 붙여넣으면 각 변형이 자기 모양대로 직렬화되고, 파서는 대부분 라이브러리가 쓰는 ADT discriminator 패턴을 알아챕니다. 한 파일의 최상위 클래스 여러 개를 붙여넣으면(아이디어가 필요하면 Scala 저장소를 참고하세요), 각각이 독립된 JSON 항목으로 나옵니다.
사용 방법
세 단계입니다. case class 하나든 모델 파일 전체든 똑같이 동작합니다.
Scala 붙여넣기 (또는 샘플 사용)
왼쪽 에디터에 Scala를 있는 그대로 넣으세요. case class, sealed trait 계층, 인스턴스, 여러 클래스 — 전부 괜찮습니다. 실제 예제를 먼저 보고 싶다면 샘플 불러오기를 눌러보세요.
import, package 선언, 어노테이션은 그대로 두셔도 됩니다. 데이터가 아닌 것은 파서가 무시합니다. 언어 세부 사항은 docs.scala-lang.org이 공식 레퍼런스입니다.
변환 버튼 누르기
초록색 변환 버튼을 클릭하세요. 도구가 Scala를 읽고 모든 클래스와 필드를 훑어 한 번에 JSON을 만듭니다. 처리 중에는 짧은 로딩 표시가 나옵니다.
JSON 복사하기
오른쪽 패널에 들여쓰기된 JSON이 채워집니다. ScalaTest 스펙, Akka HTTP 목 응답, Play fixture, API 문서 등에 바로 붙여넣으세요.
이럴 때 진짜 유용합니다
ScalaTest fixture
Scala 서비스 테스트에서 HTTP 클라이언트를 스텁하려면 JSON 바디가 필요할 때. case class를 붙여넣고 페이로드를 받아 스펙에 넣으세요.
Akka / Play HTTP 페이로드
case class를 자기 서비스에 POST할 JSON으로 만드세요. 새 엔드포인트를 붙일 때 curl로 빠르게 테스트하기 좋습니다.
Kafka 메시지 샘플
새 Kafka 토픽용 샘플 JSON 메시지를 도메인 case class에서 바로 생성하세요 — 시간이 지나면 어긋나는 손으로 만든 예제가 필요없습니다.
코드와 일치하는 문서
실제 case class에서 API 문서용 JSON 예시를 바로 뽑아내세요. 모델이 바뀌어도 문서가 정확한 상태를 유지합니다.
자주 묻는 질문
Option 값은 어떻게 직렬화되나요?
Some(x)는 값 x가 되고, None은 JSON null이 됩니다. Circe의 기본 동작과 같습니다. None에 대해 키를 생략하고 싶다면 나중에 제거할 수 있습니다 — 안전한 기본값은 형태를 예측 가능하게 유지합니다.
sealed trait와 ADT는 어떻게 처리되나요?
case class를 자식으로 가진 sealed trait는 변형별로 직렬화됩니다. 여러 변형이 부모 trait를 공유할 때는 Circe와 Play JSON에서 쓰는 흔한 discriminator 패턴({"type": "OrderPlaced", ...})이 적용되므로, 데이터를 다시 ADT로 라운드트립할 수 있습니다.
java.time 타입은 어떻게 처리되나요?
Instant, LocalDate, LocalDateTime, ZonedDateTime은 ISO-8601 문자열로 직렬화됩니다. Circe, Play JSON, uPickle이 공유하는 관례이며 java.time으로 깔끔하게 라운드트립됩니다.
Map, List, Vector, Set도 처리하나요?
네. List, Seq, Vector, Set은 모두 JSON 배열이 됩니다. Map[String, A]는 JSON 객체가 됩니다 — 문자열이 아닌 키를 쓰는 맵(Map[Int, A])은 JSON이 문자열 키만 지원하기 때문에 키/값 쌍의 배열로 출력됩니다.
여러 case class가 있는 파일 전체를 붙여넣어도 되나요?
네. 최상위 클래스마다 자기 JSON 항목으로 변환되고, 중첩된 인스턴스는 펼쳐집니다. companion 객체, 암시 변환, 헬퍼 메서드는 건너뛰고 데이터만 출력에 반영됩니다.
제 코드가 저장되나요?
붙여넣은 Scala는 변환을 위해 백엔드로 전송되며 저장되지 않습니다. 페이로드를 로깅하지도 않습니다. 민감한 코드라면 붙여넣기 전에 한 번 확인해 주세요.
함께 쓰면 좋은 도구
Scala → JSON은 하나의 조각입니다. 이 도구들과 잘 맞습니다: