본문으로 건너뛰기

JSON을 Scala 케이스 클래스로 변환 — Numio

JSON 샘플을 Scala case class로 변환합니다. 중첩 객체는 별도 case class, 배열은 Seq[...]가 되고, null 값과 배열의 일부 항목에만 있는 키는 Option[...]이 됩니다.

Circe, Play JSON, uPickle 코덱을 추가하기 전에 JSON API 모델 초안을 만듭니다.

JSON

Scala Case Class

이럴 때 사용하세요

  • Circe, Play JSON, uPickle 코덱을 추가하기 전에 JSON API 모델 초안을 만듭니다.
  • Kafka나 HTTP 샘플 페이로드를 Spark 또는 Akka 작업용 case class로 만듭니다.

사용 방법

  1. JSON 객체를 붙여 넣습니다. 선택적 필드가 있다면 키가 서로 다른 배열 항목을 여러 개 포함하세요.
  2. 출력을 확인합니다. 루트 클래스는 RootInterface이고 중첩 클래스는 키 이름의 PascalCase로 지어집니다(speakers는 Speakers가 됨).
  3. 클래스를 복사해 이름을 바꾸고, 샘플로 타입을 정할 수 없었던 Option[Any]나 Seq[Any]를 구체적인 타입으로 좁히세요.

JSON 입력

{
  "id": 7,
  "type": "conference",
  "price": 49.9,
  "venue": null,
  "tags": ["jvm", "fp"],
  "speakers": [
    { "name": "Martin", "talk": "Keynote" },
    { "name": "Li", "talk": "Effects", "slides": "https://example.com/s.pdf" }
  ]
}

Scala case class

case class RootInterface(
  id: Int,
  `type`: String,
  price: Double,
  venue: Option[Any],
  tags: Seq[String],
  speakers: Seq[Speakers]
)

case class Speakers(
  name: String,
  talk: String,
  slides: Option[String]
)

세부 정보 및 제한 사항

사이트 자체 생성기로 브라우저에서 실행되며 서버를 호출하지 않습니다. 설정이 없고 import나 코덱 derive도 추가하지 않습니다.

배열의 모든 항목이 병합됩니다. 일부 항목에서 빠졌거나 null인 키는 Option[...]이 되고, 12와 1.5가 함께 있으면 Double이 됩니다.

항상 null인 값은 Option[Any], 빈 배열은 Seq[Any]가 됩니다. 샘플에 보여 줄 타입이 없기 때문입니다.

예약어와 식별자가 될 수 없는 키는 `type`처럼 백틱으로 감쌉니다. snake_case 키는 그대로 유지됩니다.

FAQ

nullable 필드에 Option이 생성되나요?

예. 값이 null인 키는 Option[...]이 됩니다. 같은 키에 실제 값이 있는 다른 샘플이 있으면 그 타입을, 없으면 Option[Any]를 씁니다. 배열의 일부 항목에만 있는 키도 Option입니다.

루트가 JSON 배열이면 어떻게 되나요?

항목이 하나의 RootInterface case class로 병합되고, 일부 항목에만 있는 키는 Option이 되며, type RootInterfaceList = Seq[RootInterface]가 추가됩니다.

64비트 ID는 Long이 되나요?

샘플 값이 Int 범위(약 ±21억)를 벗어날 때만 그렇습니다. 그 밖의 정수는 Int가 되므로 커질 수 있는 ID나 타임스탬프는 Long으로 바꾸세요.

사양 및 참고 자료