Kotlin/개념 정리

개념 정리: JSON 구조

바보인간 2023. 3. 8. 18:16

1. JSON 구조란?

JSON은 자바스크립트의 객체 표기법으로부터 파생된 부분 집합입니다.

따라서 JSON 데이터는 다음과 같은 자바스크립트 객체 표기법에 따른 구조로 구성됩니다.

  • 객체(object)는 중괄호({})로 감싸며, 키(key)와 값(value)은 콜론(:)으로 구분됩니다. 각각의 키-값 쌍은 쉼표(,)로 구분됩니다.
  • 배열(array)은 대괄호([])로 감싸며, 값은 쉼표(,)로 구분됩니다.
  • 문자열(string)은 큰따옴표("")로 감싸며, 특수 문자를 이스케이프(escape)할 수 있습니다.
  • 숫자(number)는 정수 또는 실수로 표현할 수 있습니다.
  • 부울(boolean)은 참(true) 또는 거짓(false) 값을 가집니다.
  • null은 값이 없음을 나타냅니다.

2. 실제 형식

2-1. JSON 데이터

// 형식
"데이터이름" : "값"

// 실제
"name" : "John Smith"

2-2. JSON 객체

JSON 객체는 JSON 데이터들이 중괄호로 묶인 것을 의미합니다.

JSON 객체 구조

{
  "name": "John Smith",
  "age": 30,
  "email": "john.smith@example.com",
  "languages": ["English", "Spanish", "French"],
  "address": {
    "street": "123 Main St",
    "city": "Anytown",
    "state": "CA",
    "zipcode": "12345"
  }
}

2-3. JSON 배열

JSON 배열은 JSON 데이터에서 대괄호로 묶여서 값들을 나열한 것을 의미합니다. 위의 코드에서 "languages"가 이에 해당합니다.

JSON 배열의 구조

"languages": ["English", "Spanish", "French"]

혹은 아래와 같이 JSON 객체를 포함하는 배열을 만들 수도 있습니다.

[
  {
    "name": "John Smith",
    "age": 30,
    "email": "john.smith@example.com"
  },
  {
    "name": "Jane Doe",
    "age": 25,
    "email": "jane.doe@example.com"
  },
  {
    "name": "Bob Johnson",
    "age": 40,
    "email": "bob.johnson@example.com"
  }
]

3. 안드로이드 스튜디오에서 사용

이제 구조는 알았으나 실제로 사용할 때, 어떻게 JSON 구조를 만들어야 할 지 머리가 복잡할 수 있다. 이럴때 유용하게 사용할 수 있는 플러그인이 안드로이드 스튜디오에 존재한다. 방법은 아래와 같다.

Android Studio > File > Settings > Plugins > "JSON To Kotlin" 검색 > Install

{
  "name": "John Smith",
  "age": 30,
  "email": "john.smith@example.com",
  "languages": ["English", "Spanish", "French"],
  "address": {
    "street": "123 Main St",
    "city": "Anytown",
    "state": "CA",
    "zipcode": "12345"
  },
  "phone_numbers": [
    {
      "type": "home",
      "number": "555-1234"
    },
    {
      "type": "work",
      "number": "555-5678"
    }
  ],
  "job_history": [
    {
      "company": "Acme Inc",
      "title": "Software Engineer",
      "start_date": "2015-01-01",
      "end_date": "2017-12-31"
    },
    {
      "company": "Beta Corp",
      "title": "Senior Software Engineer",
      "start_date": "2018-01-01",
      "end_date": null
    }
  ]
}

만약 위와 같은 복잡한 JSON 데이터도 이 플러그인을 이용하면 간단하게 Data Class로 제작할 수 있다.

사용 방법은 추가할 Package에 우클릭으로 누르고 New > Json To Kotlin Class를 누르고 위의 JSON 형식을 입력하고 Class의 이름을 지정한 다음에 Create 버튼을 누르면 된다. 결과는 아래와 같다.

data class exampleJSON(
    val address: Address,
    val age: Int,
    val email: String,
    val job_history: List<JobHistory>,
    val languages: List<String>,
    val name: String,
    val phone_numbers: List<PhoneNumber>
)

data class PhoneNumber(
    val number: String,
    val type: String
)

data class JobHistory(
    val company: String,
    val end_date: String,
    val start_date: String,
    val title: String
)

data class Address(
    val city: String,
    val state: String,
    val street: String,
    val zipcode: String
)