Go's Method for Arbitrary Data Decoding
As outlined in Go's official documentation on JSON encoding, it is possible to decode arbitrary data into an interface{} using the json.Unmarshal function. 유형 어제를 사용하면 데이터 유형을 동적으로 결정할 수 있습니다.
코드 적응
코드의 다음 버전은 다음 접근 방식을 보여줍니다.
패키지 메인. 수입 (수입) "인코딩/json" "FMT" )) var my_json string =`{ "an_array": [ "with_a string", { "및": "some_more", "다른": ]] } ]] }` FUNC IDINDATATATYPES (f 인터페이스 {}) { 스위치 vf : = f. (유형) { case map [string] 인터페이스 {} : fmt.println ( "맵 :") K, V : = 범위 vf { 스위치 vv : = v. (유형) { 사례 문자열 : fmt.printf ( " %v : is string- %q \ n", k, vv) 사례 int : fmt.printf ( " %v : is int- %q \ n", k, vv) 기본: fmt.printf ( "%v :", k) 식별 데이터 타입 (V) } } CASE [] 인터페이스 {} : fmt.println ( "배열입니다 :") K, V : = 범위 vf { 스위치 vv : = v. (유형) { 사례 문자열 : fmt.printf ( " %v : is string- %q \ n", k, vv) 사례 int : fmt.printf ( " %v : is int- %q \ n", k, vv) 기본: fmt.printf ( "%v :", k) 식별 데이터 타입 (V) } } } } func main () { fmt.println ( "json : \ n", my_json, "\ n") var f 인터페이스 {} err : = json.unmarshal ([] byte (my_json), & f) err! = nil {인 경우 fmt.println (err) } 또 다른 { fmt.printf ( "JSON :") 식별 데이터 타입 (F) } }
output
package main import ( "encoding/json" "fmt" ) var my_json string = `{ "an_array":[ "with_a string", { "and":"some_more", "different":["nested", "types"] } ] }` func IdentifyDataTypes(f interface{}) { switch vf := f.(type) { case map[string]interface{}: fmt.Println("is a map:") for k, v := range vf { switch vv := v.(type) { case string: fmt.Printf("%v: is string - %q\n", k, vv) case int: fmt.Printf("%v: is int - %q\n", k, vv) default: fmt.Printf("%v: ", k) IdentifyDataTypes(v) } } case []interface{}: fmt.Println("is an array:") for k, v := range vf { switch vv := v.(type) { case string: fmt.Printf("%v: is string - %q\n", k, vv) case int: fmt.Printf("%v: is int - %q\n", k, vv) default: fmt.Printf("%v: ", k) IdentifyDataTypes(v) } } } } func main() { fmt.Println("JSON:\n", my_json, "\n") var f interface{} err := json.Unmarshal([]byte(my_json), &f) if err != nil { fmt.Println(err) } else { fmt.Printf("JSON: ") IdentifyDataTypes(f) } }코드는 다음 출력을 생성합니다 :
json : { "an_array": [ "with_a string", { "및": "some_more", "다른": ]] } ]] } JSON :지도입니다. an_array : 배열입니다. 0 : is String- "with_a string" 1 :지도입니다. 그리고 : 문자열 - "some_more" 다른 : 배열입니다. 0 : is String- "중첩" 1 : is string- "type"
이 접근법은 배열 내에서 요소 유형을 동적 식별 및 처리 할 수 있으므로, 당신의 불안정한 요구에 대한 다재다능한 솔루션을 제공합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3