> 백엔드 개발 > Golang > 알 수 없는 키와 틀에 얽매이지 않는 필드 구조를 사용하여 중첩된 JSON 데이터를 구문 분석하는 방법은 무엇입니까?

알 수 없는 키와 틀에 얽매이지 않는 필드 구조를 사용하여 중첩된 JSON 데이터를 구문 분석하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-11-16 21:22:03
원래의
623명이 탐색했습니다.

How to Parse Nested JSON Data with Unknown Keys and Unconventional Field Structures?

알 수 없는 키가 포함된 중첩 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
}
로그인 후 복사

구조가 혼란스럽기는 하지만 단계별로 분석할 수 있습니다. 처음에는 "Server1.example.com" 및 "Server2.example.com"과 같이 동적으로 변하는 알 수 없는 서버 이름이 있음을 확인합니다. 또한 "호스트" 필드에는 둘러싸는 키가 없는 암호화된 정규 표현식이 포함되어 있습니다.

이 문제를 해결하려면 제공된 구조체로 초점을 옮겨 보겠습니다.

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

이 구조체는 다음과 같이 설계되었습니다. "메시지" 개체 내의 알려진 필드를 처리하려고 시도했지만 다양한 서버 이름과 고유한 "호스트"를 캡처하지 못했습니다. 필드.

핵심 통찰력은 보다 유연한 데이터 구조, 즉 map[string]ServerStruct를 활용하는 것입니다. 이를 통해 알 수 없는 서버 이름을 ServerStruct 값을 가리키는 키로 간주할 수 있습니다.

수정된 구조는 다음과 유사합니다.

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

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

적절한 JSON 태그를 추가하면 다음을 수행할 수 있습니다. 이제 JSON 데이터를 이 향상된 구조체로 성공적으로 구문 분석합니다.

map[string]ServerStruct 및 JSON 태그를 사용하여 키가 지정되지 않은 필드의 가능성을 수용하면 중첩된 JSON 데이터의 복잡한 구조를 효과적으로 풀고 원하는 정보를 추출할 수 있습니다.

위 내용은 알 수 없는 키와 틀에 얽매이지 않는 필드 구조를 사용하여 중첩된 JSON 데이터를 구문 분석하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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