解組不同類型的陣列
在 JSON 處理中,解組具有不同元素類型的陣列可能具有挑戰性。本文解決了對由已知但未排序資料類型的元素組成的陣列進行解組的問題。
Go 的任意資料解碼方法
如Go 的JSON 官方文件中所述編碼後,可以使用json.Unmarshal 函數將任意資料解碼為介面{} 。透過使用類型斷言,可以動態確定資料類型。
調整您的程式碼
以下程式碼的修改版本展示了這種方法:
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", { "and":"some_more", "different":["nested", "types"] } ] } JSON: is a map: an_array: is an array: 0: is string - "with_a string" 1: is a map: and: is string - "some_more" different: is an array: 0: is string - "nested" 1: is string - "types"
這種方法允許動態識別和處理數組中的元素類型,為您的解群組需求提供通用的解決方案。
以上是如何在 Go 中解組具有混合資料類型的 JSON 數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!