다이내믹 JSON 해석/비직렬화 방법
시나리오:
JSON은 다음과 같습니다.
{
"Bangalore_City": "35_Temperature",
"NewYork_City": "31_Temperature",
"Copenhagen_City": "29_Temperature"
}
이 데이터는 하드 코드화된 키가 없는 방식으로 구성되어 있습니다.City/Temperature기본적으로는 정당한 가치입니다.
문제: 다이내믹한 JSON을 해석할 수 없습니다.
질문: 이런 종류의 JSON 파싱에 대한 해결책을 찾을 수 있는 사람이 있습니까?Go-Simplejson, gabs & default를 시도했지만 실패했어요.
주의: 위의 JSON은 샘플용입니다.그리고 현재 API를 사용하고 있는 어플리케이션도 많기 때문에 데이터 구조를 변경하고 싶지 않습니다.즉, 다음과 같이 변경할 수 없습니다.
[{
"City_Name":"Bangalore",
"Temperature": "35"
},...]
그럼 내가 정의할 수 있어struct
type TempData struct {
City_Name string
Temperature string
}
마샬을 풀 수 있습니다.map[string]string예를 들어 다음과 같습니다.
m := map[string]string{}
err := json.Unmarshal([]byte(input), &m)
if err != nil {
panic(err)
}
fmt.Println(m)
출력(랩핑):
map[Bangalore_City:35_Temperature NewYork_City:31_Temperature
Copenhagen_City:29_Temperature]
바둑 놀이터에서 시도해 보세요.
이렇게 하면 키나 값이 무엇이든 간에 모든 페어를 1개의 코스에서 사용할 수 있습니다.map인쇄하거나 루프오버할 수 있습니다.
또, 이 예에 포함되어 있는 것은,string값 유형이 다른 경우(예:string, 숫자 등)를 사용할 수 있습니다.interface{}값 유형의 경우 맵이 유형으로 지정됩니다.map[string]interface{}.
또, 이러한 동적인 오브젝트를 간단하게 조작할 수 있도록 라이브러리를 작성했습니다.이러한 경우 큰 도움이 될 수 있습니다.
표준.encoding/json대부분의 사용 사례에 적합하지만 다른 솔루션에 비해 상당히 느릴 수 있습니다.퍼포먼스가 필요한 경우 fastjson을 사용해 보십시오.JSON 스키마에 일치하는 구조체 또는 맵을 작성할 필요 없이 임의의 JSON을 해석합니다.
아래의 코드 예를 참조하십시오.이 모든 것이 반복됩니다.(key, value)JSON 오브젝트 쌍:
var p fastjson.Parser
v, err := p.Parse(input)
if err != nil {
log.Fatal(err)
}
// Visit all the items in the top object
v.GetObject().Visit(func(k []byte, v *fastjson.Value) {
fmt.Printf("key=%s, value=%s\n", k, v)
// for nested objects call Visit again
if string(k) == "nested" {
v.GetObject().Visit(func(k []byte, v *fastjson.Value) {
fmt.Printf("nested key=%s, value=%s\n", k, v)
})
}
})
유효한 JSON의 해석 방법에 대한 일반적인 답변을 추가합니다.var m interface{}모든 타입에 대응합니다.여기에는 지도(OP가 요청한) 배열, 문자열, 숫자 및 중첩된 구조가 포함됩니다.
var m interface{}
err := json.Unmarshal([]byte(input), &m)
if err != nil {
panic(err)
}
fmt.Println(m)
또한 gabs 패키지 https://github.com/Jeffail/gabs를 사용하는 것도 고려해 주십시오.
"Gabs는 이동 시 동적 또는 알려지지 않은 JSON 구조를 처리하기 위한 작은 유틸리티입니다."
언급URL : https://stackoverflow.com/questions/29347092/how-to-parse-deserialize-dynamic-json
'source' 카테고리의 다른 글
| React에 업로드하기 전에 이미지 미리보기 가져오기 (0) | 2023.04.03 |
|---|---|
| 워드프레스 데이터베이스에서 외부 페이지로 미리 보기를 가져오는 방법 (0) | 2023.04.03 |
| TypeScript의 "type" 예약어는 무엇입니까? (0) | 2023.04.03 |
| JQuery ajax 콜의 디폴트 타임아웃 값 (0) | 2023.04.03 |
| angularjs에서 클릭된 요소 액세스 (0) | 2023.04.03 |