Scala for Backend Engineering & Functional Programming · 강의

JSON 구문 분석

텍스트를 JSON 값으로 변환해 보세요.

레슨 1/413개 단계

JSON 구문 분석은(는) CoddyKit의 무료 Scala for Backend Engineering & Functional Programming 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Scala for Backend Engineering & Functional Programming 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Scala for Backend Engineering & Functional Programming 강의에는 총 4개의 강의가 포함되어 있습니다.

Circe를 사용하는 이유

Circe는 cats 함수형 생태계를 기반으로 구축된 Scala용 인기 JSON 라이브러리입니다.

타입 안전성과 불변성을 중시합니다. 파싱은 예외를 발생시키는 대신 Either를 반환하고, 디코딩은 타입이 없는 맵 대신 타입이 지정된 값을 생성합니다.

이 수업에서는 원시 JSON 텍스트를 Circe의 Json 모델로 변환하는 방법을 다룹니다.

의존성 추가하기

Circe는 여러 모듈로 제공됩니다. 파싱과 핵심 모델을 사용하려면 circe-core와 circe-parser가 필요합니다.

circe-generic 모듈은 자동 코덱 파생 기능을 추가하며, 이후 수업에서 다룹니다.

libraryDependencies ++= Seq(
  "io.circe" %% "circe-core" % "0.14.6",
  "io.circe" %% "circe-parser" % "0.14.6"
)

parse 함수

JSON을 읽는 진입점은 io.circe.parser.parse입니다.

이 함수는 String을 받아 Either[ParsingFailure, Json]를 반환합니다. 왼쪽에는 구문 오류가 담기고, 오른쪽에는 파싱된 트리가 담깁니다.

import io.circe.parser._

val result = parse("{\"name\": \"Ada\", \"age\": 36}")
// result: Either[ParsingFailure, Json]

파싱 실패 처리하기

parse는 Either를 반환하므로, try/catch 대신 패턴 매칭이나 조합기를 사용하여 오류를 명시적으로 처리합니다.

ParsingFailure에는 구문 문제를 설명하는 사람이 읽을 수 있는 메시지가 포함됩니다.

parse("{ not valid }") match {
  case Right(json) => println(json)
  case Left(err)   => println(s"Failed: ${err.message}")
}

Json 모델

파싱에 성공한 값은 Json입니다. 이는 JSON의 여섯 가지 타입인 객체, 배열, 문자열, 숫자, 불리언, null 중 하나를 나타내는 불변 트리입니다.

isObject 같은 조건식으로 구조를 확인하거나, 구조에 따라 접을 수 있습니다.

val json = parse("[1, 2, 3]").getOrElse(Json.Null)
println(json.isArray)   // true
println(json.isObject)  // false

커서로 탐색하기

중첩된 데이터를 읽으려면 Json 값에서 HCursor를 호출합니다. H커서는 트리 안을 이동할 수 있게 해 주는 지퍼입니다.

downField를 사용하여 객체의 특정 키 안으로 내려갑니다.

val json = parse("{\"user\": {\"name\": \"Ada\"}}").toOption.get
val cursor = json.hcursor
val name = cursor.downField("user").downField("name").as[String]
// name: Either[DecodingFailure, String] = Right(Ada)

as로 값 추출하기

위치를 정한 뒤 .as[A]를 호출하면 현재 위치의 값을 타입 A로 디코딩하려고 시도합니다.

Either[DecodingFailure, A]를 반환하므로 타입 불일치가 예외가 아니라 값으로 보고됩니다.

val json = parse("{\"age\": 36}").toOption.get
val age = json.hcursor.downField("age").as[Int]
println(age)  // Right(36)

parse와 decode 비교

원시 Json 트리를 직접 살펴보고 싶을 때는 parse를 사용하십시오.

String에서 타입이 지정된 값 A로 한 번에 이동하고 싶을 때는 decode[A]를 사용하십시오. 이 함수는 파싱과 디코딩을 결합합니다.

import io.circe.parser.decode

val n: Either[io.circe.Error, Int] =
  decode[Int]("42")
println(n)  // Right(42)

선택적 필드

실제 JSON에는 키가 누락되는 경우가 많습니다. 필드 안으로 내려간 뒤 커서 메서드 get[A]을 사용하면 해당 키가 없을 때 실패하고, getOrElse는 기본값을 제공합니다.

Option[A]으로 디코딩하면 누락되었거나 null인 필드가 None으로 처리됩니다.

val json = parse("{\"name\": \"Ada\"}").toOption.get
val nick = json.hcursor.get[Option[String]]("nickname")
println(nick)  // Right(None)

배열 파싱하기

List[A] 또는 Vector[A]를 요청하면 JSON 배열을 Scala 컬렉션으로 바로 디코딩할 수 있습니다.

Circe는 각 요소를 매핑하며, 요소 중 하나라도 타입이 잘못되면 DecodingFailure와 함께 즉시 중단합니다.

import io.circe.parser.decode

val xs = decode[List[Int]]("[1, 2, 3]")
println(xs)  // Right(List(1, 2, 3))

예쁘게 출력하기

모든 Json 값은 .noSpaces를 사용하면 압축된 출력으로, .spaces2를 사용하면 들여쓰기된 출력으로 텍스트로 다시 렌더링됩니다.

이를 통해 파싱한 데이터를 같은 형태로 다시 변환할 수 있으며, 기록이나 디버깅에도 유용합니다.

val json = parse("{\"a\":1,\"b\":2}").toOption.get
println(json.noSpaces)
println(json.spaces2)

빠른 확인

Circe 파싱에 대해 제대로 이해했는지 확인해 보십시오.

복습

JSON 텍스트를 Circe의 모델로 변환하는 방법을 배웠습니다. parse는 Either[ParsingFailure, Json]를 반환하고, decode[A]는 바로 타입이 지정된 값으로 변환합니다.

HCursor는 downField로 탐색하며, .as[A]는 타입이 지정된 값을 추출합니다. 실패는 예외가 아니라 값으로 처리됩니다.

무료로 시작

AI 튜터와 함께 Scala을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
39
레슨
143

자주 묻는 질문

“JSON 구문 분석” 강의는 무료인가요?

네 — “JSON 구문 분석” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Scala for Backend Engineering & Functional Programming 강의 전체를 잠금 해제할 수 있습니다. Scala for Backend Engineering & Functional Programming 강의에는 총 4개의 강의가 포함되어 있습니다.

“JSON 구문 분석”에서 뭘 배우나요?

텍스트를 JSON 값으로 변환해 보세요. 브라우저에서 직접 실행하는 실습 코드로 Scala for Backend Engineering & Functional Programming을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Scala for Backend Engineering & Functional Programming을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Scala for Backend Engineering & Functional Programming은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“JSON 구문 분석” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Scala for Backend Engineering & Functional Programming 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Scala for Backend Engineering & Functional Programming 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. JSON 구문 분석
  2. 케이스 클래스으로 디코딩하기
  3. JSON으로 인코딩하기
  4. 사용자 지정 코덱
← Scala for Backend Engineering & Functional Programming(으)로 돌아가기