[go] 중첩된 JSON 데이터 처리하기

JSON(JavaScript Object Notation)은 데이터를 효율적으로 표현하기 위한 경량의 데이터 형식입니다. JSON 데이터는 계층적으로 중첩될 수 있으며, 이 중첩된 구조를 효과적으로 처리하는 것은 매우 중요합니다.

JSON 데이터 파싱

JSON 데이터를 처리하기 위해서는 먼저 파싱(parsing)하여 데이터를 읽고 쓸 수 있어야 합니다. Go 언어에서는 encoding/json 패키지를 사용하여 JSON 데이터를 파싱할 수 있습니다. 다음은 간단한 JSON 데이터를 파싱하는 예제입니다.

package main

import (
	"encoding/json"
	"fmt"
	"log"
)

func main() {
	data := []byte(`{"name": "John", "age": 30, "car": {"model": "BMW", "year": 2021}}`)

	var result map[string]interface{}
	err := json.Unmarshal(data, &result)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println(result["name"]) // John
	fmt.Println(result["age"])  // 30

	car := result["car"].(map[string]interface{})
	fmt.Println(car["model"]) // BMW
	fmt.Println(car["year"])  // 2021
}

위의 예제는 encoding/json 패키지를 사용하여 JSON 데이터를 파싱하고, 중첩된 구조를 처리하는 방법을 보여줍니다.

중첩된 JSON 데이터 처리

중첩된 JSON 데이터를 처리할 때에는 해당 데이터의 구조를 이해하고 적절히 접근해야 합니다. Go의 encoding/json 패키지를 사용하면 중첩된 JSON 데이터를 다루는 것이 간단합니다.

다음은 중첩된 JSON 데이터를 처리하는 예제입니다.

package main

import (
	"encoding/json"
	"fmt"
	"log"
)

func main() {
	data := []byte(`{
		"store": {
			"book": [
				{ "title": "Go Programming", "author": "John Doe" },
				{ "title": "Python Programming", "author": "Jane Doe" }
			],
			"bicycle": {
				"color": "red",
				"price": 200
			}
		}
	}`)

	var result map[string]interface{}
	err := json.Unmarshal(data, &result)
	if err != nil {
		log.Fatal(err)
	}

	books := result["store"].(map[string]interface{})["book"].([]interface{})
	for _, book := range books {
		fmt.Println(book.(map[string]interface{})["title"])   // Go Programming, Python Programming
		fmt.Println(book.(map[string]interface{})["author"])  // John Doe, Jane Doe
	}

	bicycle := result["store"].(map[string]interface{})["bicycle"].(map[string]interface{})
	fmt.Println(bicycle["color"]) // red
	fmt.Println(bicycle["price"]) // 200
}

위의 예제는 중첩된 JSON 데이터를 다루는 방법을 보여줍니다. 필요에 따라 적절한 타입으로 형변환하여 데이터에 접근할 수 있습니다.

JSON 데이터는 다양한 형태로 중첩될 수 있으므로, 실제 데이터의 구조에 맞추어 적절한 접근 방식을 선택해야 합니다.

중첩된 JSON 데이터를 처리하는 방법에 대한 좀 더 심화된 내용은 공식 문서에서 확인할 수 있습니다.