2016-11-09 1 views
0

구조체에 아래 형식의 json 데이터를 언 마샬링하는 데 문제가 있습니다. json의 구조가 나에게 약간 혼란스러워 보입니다. 그래서 나는 그것을 언 마샬링하기 위해 멍청한 모든 일에 사과합니다.Golang이 알 수없는 키로 중첩 된 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 
} 

다음 구조체를 사용하여 언 마샬링하려고합니다.

type ServerDetails struct { 
    Message struct{ 
    Hostname struct{ 
     Details struct{ 
     Application string `json:"application"` 
     }`json:"-"` 
     }`json:"-"` 
    }`json:"message"` 
} 

필드 Server[0-9].example.com는 생성시 알 수없는 것, 그리고 변경됩니다,이 분야가

 { 
    "application": "Apache", 
    "host": { 
     "name": "/^Server-[13456]/" 
    }, 

직후 외부 키가없는 서버 이름, 어떤 다시 나에게 혼란스럽게 보입니다. 이것이 비 정렬 화 될 수있는 방법을 이해하기 위해 많은 수의 조합을 시도했지만 실패했습니다.

json 필드를 구조체로 언 마샬링하는 작업 방법은 무엇입니까? 누군가 나를 이해시킬 수 있습니까?

감사합니다.

+2

다양한 키를 사용하여 객체를 비 정렬 화하려면'map [string] whateverstruct'를 사용하십시오. – Volker

+0

감사합니다 @ 볼커, 당신은 내 하루를 구 했어요. 나는 적절하게 수정했고 효과가 있었다. 대답으로 추가 할 수 있을까요? 동의 할 것입니다. – scott

답변

3

당신은지도를 포함 할 수있다 [문자열을 구축하기 위해 우수한 https://mholt.github.io/json-to-go/를 사용할 수있는 초] 후 불필요한 쉼표로 유효하지 않습니다] ServerStruct 귀하의 요구 사항을 fullfill하십시오.

당신의 구조체는 다음과 같이 수 :

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

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

을 몇 가지 추가 JSON 태그를 사용하면 JSON을 구문 분석 할 수있을 것입니다.

0

당신 JSON을 사용하여 JSON을 수정 한 후에는 다음과 같은 이동 구조체

type AutoGenerated struct { 
    Message struct { 
     Server1ExampleCom []struct { 
      Application string `json:"application"` 
      Host struct { 
       Name string `json:"name"` 
      } `json:"host"` 
      Owner string `json:"owner"` 
      Project string `json:"project"` 
      Subowner string `json:"subowner"` 
     } `json:"Server1.example.com"` 
     Server2ExampleCom []struct { 
      Application string `json:"application"` 
      Host struct { 
       Name string `json:"name"` 
      } `json:"host"` 
      Owner string `json:"owner"` 
      Project string `json:"project"` 
      Subowner string `json:"subowner"` 
     } `json:"Server2.example.com"` 
    } `json:"message"` 
    ResponseMs int `json:"response_ms"` 
    Success bool `json:"success"` 
} 
+0

죄송합니다. 혼수 상태가 잘못되었습니다. 나는 그것을 바로 잡을 것이다. 그러나 json은 생성시 알려지지 않은 가변 키를 가지고 있기 때문에 server1.example.com을 구조체에 하드 코딩 할 수 없습니다. 그것은 바뀔 수 있습니다. – scott

+0

네 말이 맞아. 이 도구는 JSON 형식을 미리 알고있는 경우에도 유용한 도구입니다. –

+0

예, 동의합니다. +1 편리한 도구를 제안 :-) – scott

관련 문제