Go Unmarshal을 사용하여 복잡한 JSON을 구문 분석하는 방법: 내부 작동 방식 공개
Go의 인코딩/json 패키지는 json.Unmarshal을 제공합니다. JSON 구문 분석 작업을 단순화하는 기능입니다. 그러나 복잡한 JSON 구조를 접하는 것은 어려울 수 있습니다.
인터페이스로 디코딩{}
알 수 없는 JSON 데이터의 경우 Unmarshal을 사용하여 인터페이스로 디코딩할 수 있습니다.{} . 이 접근 방식을 사용하면 키는 문자열이고 값은 인터페이스{} 유형인 map[string]interface{} 값이 생성됩니다.
예를 들어 다음 JSON을 고려하세요.
{ "k1" : "v1", "k2" : "v2", "k3" : 10, "result" : [ [ ["v4", v5, {"k11" : "v11", "k22" : "v22"}] , ... , ["v4", v5, {"k33" : "v33", "k44" : "v44"} ] ], "v3" ] }
The Go 이 데이터를 디코딩하고 액세스하는 코드:
package main import ( "encoding/json" "fmt" ) func main() { b := []byte(`{ "k1" : "v1", "k3" : 10, result:["v4",12.3,{"k11" : "v11", "k22" : "v22"}] }`) var f interface{} err := json.Unmarshal(b, &f) if err != nil { fmt.Println(err) return } m := f.(map[string]interface{}) for k, v := range m { switch vv := v.(type) { case string: fmt.Println(k, "is string", vv) case int: fmt.Println(k, "is int", vv) case []interface{}: fmt.Println(k, "is an array:") for i, u := range vv { fmt.Println(i, u) } default: fmt.Println(k, "is of a type I don't know how to handle") } } }
인터페이스 유형을 지정하고 유형 스위치를 활용하면 다음이 가능합니다. 탐색
위 내용은 `json.Unmarshal`을 사용하여 Go에서 복잡한 JSON 구조를 효과적으로 구문 분석하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!