如何正确解组不同类型的数组?
只要我有键值对,解组就非常简单了,但是我将如何以不同的顺序解组不同类型的数组呢?单个元素定义明确且已知,但顺序不明确。
我无法提出一个漂亮的解决方案。
我会尝试对所有元素进行错误处理吗?是否有某种工会类型可以为我做到这一点?
package main
import (
"encoding/json"
"fmt"
)
var my_json string = `{
"an_array":[
"with_a string",
{
"and":"some_more",
"different":["nested", "types"]
}
]
}`
type MyInner struct {
And string
Different []string
}
type MyJSON struct {
An_array []json.RawMessage
}
func main() {
var my_json_test MyJSON
e := json.Unmarshal([]byte(my_json), &my_json_test)
if e != nil {
fmt.Println(e)
} else {
for index, value := range my_json_test.An_array {
fmt.Println("index: ", index)
fmt.Println("value: ", string(value))
}
var my_inner MyInner
err := json.Unmarshal(my_json_test.An_array[1], &my_inner)
if err != nil {
fmt.Println(err)
} else {
fmt.Println("inner structure: ", my_inner)
}
}
}
-
Go官方博客上有一篇不错的文章
encoding/json
:JSON和GO。可以将“任意数据解码”到接口{}中,并使用类型断言来动态确定类型。您的代码可能可以修改为:
package main import ( "encoding/json" "fmt" ) var my_json string = `{ "an_array":[ "with_a string", { "and":"some_more", "different":["nested", "types"] } ] }` func WTHisThisJSON(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) WTHisThisJSON(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) WTHisThisJSON(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: ") WTHisThisJSON(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"
尚未完成,但显示了它如何工作。
-
如何解组具有不同值类型的json数组
2021-02-01 关注 0 浏览80 1答案
-
JAXB:如何解组不同类型但具有公共父对象的List?
2021-01-30 关注 0 浏览63 1答案
-
在列表中使用不同类型去解组JSON
2021-02-01 关注 0 浏览148 1答案
-
正确的JSON模式用于不同类型的项目数组
2021-01-31 关注 0 浏览95 1答案
-
如何将不同类型的数据从文件导入Python Numpy数组?
2021-01-29 关注 0 浏览77 1答案
-
如何在Swift中为UITableView处理数组中的两种不同类型
2021-01-31 关注 0 浏览77 1答案
-
numpy将不同类型的数组保存到文本文件
2021-01-29 关注 0 浏览78 1答案
-
如何键入提示具有不同类型值的字典
2021-01-29 关注 0 浏览71 1答案
-
如何解码具有不同类型的JSON属性?
2021-01-31 关注 0 浏览78 1答案
-
如何与不同类型的家长沟通?
2021-09-20 关注 0 浏览39 1答案