>  기사  >  백엔드 개발  >  알 수 없는 키로 중첩된 JSON을 역마샬링하는 방법은 무엇입니까?

알 수 없는 키로 중첩된 JSON을 역마샬링하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-18 12:29:02635검색

How to Unmarshal Nested JSON with Unknown Keys?

알 수 없는 키가 있는 중첩 JSON 풀기

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
}

이 예에 표시된 것처럼 서버 이름(Server[0-9].example.com)은 미리 결정되지 않으며 달라질 수 있습니다. 또한 서버 이름 다음 필드에는 명시적 키가 없습니다.

솔루션 구조화

이 데이터를 효과적으로 캡처하기 위해 map[string]ServerStruct 구조를 사용할 수 있습니다.

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

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

이러한 구조를 통합하여 알 수 없는 서버 이름을 맵에 할당할 수 있습니다.

공개 JSON 비밀

JSON 역마샬링을 더욱 효과적으로 수행하려면 필요한 JSON 태그를 추가하는 것이 좋습니다.

import "encoding/json"

// YourStruct contains the JSON structure with success, response time, and a map of servers
type YourStruct struct {
    Success    bool
    ResponseMS int `json:"response_ms"`
    Servers    map[string]*ServerStruct `json:"message"`
}

// ServerStruct holds server information, including application, owner, etc.
type ServerStruct struct {
    Application string `json:"application"`
    Owner       string `json:"owner"`
    [...]
}

// UnmarshalJSON is a custom unmarshaller that handles nesting and unknown keys
func (s *YourStruct) UnmarshalJSON(data []byte) error {
    type YourStructHelper struct {
        Success    bool
        ResponseMS int               `json:"response_ms"`
        Servers    map[string]ServerStruct `json:"message"`
    }
    var helper YourStructHelper
    if err := json.Unmarshal(data, &helper); err != nil {
        return err
    }
    s.Success = helper.Success
    s.ResponseMS = helper.ResponseMS
    s.Servers = make(map[string]*ServerStruct)
    for k, v := range helper.Servers {
        s.Servers[k] = &v // Explicitly allocate memory for each server
    }
    return nil
}

이러한 조정을 통해 제공된 JSON을 사용자 정의 구조체로 효과적으로 역마샬링하여 손쉽게 데이터를 조작할 수 있는 방법입니다.

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

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