> 백엔드 개발 > Golang > 알 수 없는 키와 동적 서버 이름을 사용하여 중첩된 JSON을 역마샬링하는 방법은 무엇입니까?

알 수 없는 키와 동적 서버 이름을 사용하여 중첩된 JSON을 역마샬링하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-22 07:03:11
원래의
361명이 탐색했습니다.

How to Unmarshall Nested JSON with Unknown Keys and Dynamic Server Names?

알 수 없는 키로 중첩 JSON 역마샬링

문제는 알 수 없는 수의 외부 키와 혼란스럽게 구조화된 중첩 JSON 구조를 구문 분석하는 데 있습니다. 열쇠. 다음 JSON 형식을 고려하십시오.

{
  "message": {
    "Server1.example.com": [],
    "Server2.example.com": []
  },
  "response_ms": 659,
  "success": true
}
로그인 후 복사

구조 정의 복잡성

복잡성은 서버 이름 외부에 명확한 키가 없고 서버 이름의 동적 특성으로 인해 발생합니다. 외부 키. 깊게 중첩된 구조체를 사용한 초기 시도:

type ServerDetails struct {
  Message struct {
    Hostname struct {
      Details struct {
        Application string `json:"application"`
      } `json:"-"`
    } `json:"-"`
  } `json:"message"`
}
로그인 후 복사

알 수 없는 서버 이름과 외부 키가 없는 단일 중첩 키로 인해 실패합니다.

동적 키 솔루션

이러한 문제를 극복하기 위해 최상위 구조체 내에서 map[string]ServerStruct를 활용할 수 있습니다. ServerStruct에는 각 서버와 관련된 애플리케이션, 소유자 및 기타 관련 정보가 포함되어 있습니다. 적절한 구문 분석을 보장하기 위해 JSON 태그를 전략적으로 추가할 수 있습니다.

수정된 구조체 정의

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

type ServerStruct struct {
    Application string
    Owner string
    [...]
}
로그인 후 복사

JSON 태그 및 역마샬링

추가 JSON 태그는 다음과 같습니다. 필요:

{
  "message": {
    "Server1.example.com": [
      {
        "application": "Apache",
        "host": {
          "name": "/^Server-[13456]/"
        },
        "owner": "User1",
        "project": "Web",
        "subowner": "User2"
      }
    ],
로그인 후 복사

이제 "message" 필드가 map[string][]ServerStruct로 역정렬화됩니다. 맵의 각 키는 서버 이름을 나타내며 해당 값은 ServerStruct의 배열입니다. "-" 태그를 사용하여 언마샬링하는 동안 "host" 필드는 무시됩니다.

이러한 수정을 통해 JSON 데이터를 수정된 구조체로 성공적으로 구문 분석할 수 있습니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿