"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Go에서 중첩된 JSON을 객체 배열로 역마샬링하는 방법은 무엇입니까?

Go에서 중첩된 JSON을 객체 배열로 역마샬링하는 방법은 무엇입니까?

2024년 12월 21일에 게시됨
검색:958

How to Unmarshal Nested JSON into an Array of Objects in Go?

Go에서 중첩된 JSON을 객체 배열로 역마샬링

문제

다음 JSON 데이터를 고려하세요.

{
   "1001":{
      "level":10,
      "monster-id":1001,
      "skill-level":1,
      "aimer-id":301
   },
   "1002":{
      "level":12,
      "monster-id":1002,
      "skill-level":1,
      "aimer-id":302
   },
   "1003":{
      "level":16,
      "monster-id":1003,
      "skill-level":2,
      "aimer-id":303
   }
}

목표는 이 JSON을 Monster 객체 배열로 역마샬링하는 것입니다.

type Monster struct {
    MonsterId  int32
    Level      int32
    SkillLevel int32
    AimerId    int32
}

솔루션

이를 달성하려면 다음 단계를 따르세요.

  1. MonsterCollection 정의: MonsterCollection 유형을 생성하여 몬스터 지도를 보관합니다. 문자열 키가 있는 객체.
type MonsterCollection struct {
    Pool map[string]Monster
}
  1. FromJson 메서드 구현: 비정렬화를 처리하기 위해 MonsterCollection 유형에 FromJson 메서드를 정의합니다.
func (mc *MonsterCollection) FromJson(jsonStr string) error {
    var data *map[string]Monster
    b := []byte(jsonStr)
    return json.Unmarshal(b, &data)
}
  • var 데이터 사용 *map[string]Monster는 인터페이스{} 사용을 피하여 결과 지도가 원하는 유형을 갖도록 보장합니다.
  • 데이터를 포인터로 전달하면 다음이 보장됩니다. 역마샬링 중 변경된 내용은 MonsterCollection의 Pool 필드에 반영됩니다.
  1. 올바른 키 Pool에 입력: JSON 데이터의 키와 일치하도록 풀 맵의 키 유형을 문자열로 변경합니다.
  2. 구조체 태그 사용: Monster 구조에 JSON 구조 태그를 추가합니다. JSON 데이터의 필드 이름을 지정합니다.
type Monster struct {
    MonsterId  int32 `json:"monster-id"`
    Level      int32 `json:"level"`
    SkillLevel int32 `json:"skill-level"`
    AimerId    int32 `json:"aimer-id"`
}
  1. Call FromJson: JSON 문자열을 사용하여 FromJson 메서드를 호출하여 데이터를 MonsterCollection으로 역정렬화합니다.
mc := new(MonsterCollection)
err := mc.FromJson(jsonStr)
  1. 오류 확인: 디버깅 목적으로 FromJson에서 반환된 오류를 처리합니다.
  2. 객체에 액세스합니다. : MonsterCollection의 Pool 필드를 사용하여 개별 Monster 개체에 액세스합니다.
for id, monster := range mc.Pool {
    fmt.Println(id, monster)
}

이 단계를 수행하면 중첩된 JSON 데이터를 Go의 Monster 객체 배열로 성공적으로 역마샬링할 수 있습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3