>  기사  >  백엔드 개발  >  Go를 사용하여 동적 키로 중첩된 JSON을 역마샬링하는 방법은 무엇입니까?

Go를 사용하여 동적 키로 중첩된 JSON을 역마샬링하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-22 06:52:15160검색

How to Unmarshal Nested JSON with Dynamic Keys Using Go?

동적 키를 사용하여 중첩 JSON 역마샬링

복잡한 JSON 구조에서 동적으로 변경되는 키가 있는 중첩 객체를 만나면 역마샬링 중에 문제가 발생할 수 있습니다. 다음 JSON 데이터를 고려하십시오.

{
  "message": {
    "Server1.example.com": [
      {
        "application": "Apache",
        "host": {
          "name": "/^Server-[13456]/"
        },
        "owner": "User1",
        "project": "Web",
        "subowner": "User2"
      }
    ],
    "Server2.example.com": [
      {
        "application": "Mysql",
        "host": {
          "name": "/^Server[23456]/"
        },
        "owner": "User2",
        "project": "DB",
        "subowner": "User3"
      }
    ]
  },
  "response_ms": 659,
  "success": true
}

해결책:

이러한 JSON을 효과적으로 역마샬링하려면 동적 키가 있는 중첩 객체에 대해 map[string]ServerStruct를 사용하는 것이 좋습니다. . 이 접근 방식을 사용하면 이름을 알 수 없는 여러 서버를 포함할 수 있습니다.

다음은 업데이트된 구조체의 예입니다.

type YourStruct struct {
    Success bool
    ResponseMS int
    Servers map[string]*ServerStruct
}

type ServerStruct struct {
    Application string
    Owner string
    [...]
}

JSON 태그를 추가하면 디코더에 특정 JSON을 매핑하도록 지시할 수 있습니다. 해당 구조체 필드에 필드를 추가합니다. 업데이트된 태그는 다음과 같습니다.

type YourStruct struct {
    Success  `json:"success"`
    ResponseMS `json:"response_ms"`
    Servers  `json:"-"`
}

type ServerStruct struct {
    Application string `json:"application"`
    Owner string `json:"owner"`
    [...]
}

"Servers" 필드의 json:"-" 태그는 디코더가 JSON 필드를 "ServerStruct" 필드에 직접 매핑하는 것을 건너뛰도록 합니다. 대신 필드를 map[string]ServerStruct에 매핑합니다.

이 접근 방식은 동적 키를 사용하여 중첩된 JSON 개체를 역마샬링하는 유연한 솔루션을 제공하므로 각 서버 개체 내의 데이터에 쉽게 액세스할 수 있습니다.

위 내용은 Go를 사용하여 동적 키로 중첩된 JSON을 역마샬링하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.