请在标记之前阅读该问题。
{
"out_key": {
"some_uri": "url",
"more_than_one_key_here": {
"Ip": "127.0.0.1",
"port": "80",
}
}
}
out_key
是动态创建的。没有猜测它的名字。
同样,more_than_one_key_here
也是动态创建的。 some_uri
下的out_key
将保持不变。在这种情况下,如何创建用于解码JSON的结构?
答案 0 :(得分:2)
在Go字段中,必须在编译时知道结构的名称。因此,在您的情况下,结构类型是不合适的。或者,您可以使用地图。
让我们说,您只对IP和端口值感兴趣。然后你可以完全忽略JSON对象的键。
package main
import (
"encoding/json"
"fmt"
"log"
)
const data = `{
"out_key": {
"some_uri": "url",
"more_than_one_key_here": {
"Ip": "127.0.0.1",
"port": "80"
}
}
}`
func main() {
m := make(map[string]map[string]interface{})
err := json.Unmarshal([]byte(data), &m)
if err != nil {
log.Fatalf("failed to parse JSON: %v", err)
}
for _, value := range m {
for _, value := range value {
m, ok := value.(map[string]interface{})
if ok {
fmt.Printf("IP: %s\n", m["Ip"])
fmt.Printf("Port: %s\n", m["port"])
}
}
}
}
答案 1 :(得分:-3)
您可以为Ip和Port创建一个结构,为其中一个键创建一个单独的结构。
type data struct{
Ip string
port string
}
type DynamicKey map[string]data
然后,一旦你解码了json并拥有了动态密钥,比如说(rando_key)你可以这样做
fmt.Println(DynamicKey[rando_key].Ip, DynamicKey[rando_key].port)
这仅适用于其中一个键,但可以重复此过程。