遍历嵌套的JSON结构

huangapple go评论82阅读模式
英文:

Traversing nested JSON structs

问题

我想遍历嵌套的JSON结构并从interface{}中获取每个键和值。

以下是要翻译的代码部分:

我想从以下结构中获取

{
    "tg": {
        "A": {
            "E": 100,
            "H": 14
        },
        "B": {
            "D": 1
        },
        "C": {
            "D": 1,
            "E": 1
        },
        "D": {
            "F": 1,
            "G": 1,
            "H": 1
        },
        "E": {
            "G": 1
        }
    }
}

我能够获取以下内容

a := js.Get("tg").Get("D").Get("F")
fmt.Println(*a) // {1}

但是在将其类型断言为整数时遇到了问题

invalid type assertion: (*a).(int)

如何遍历整个结构并获取每个字符映射的整数

谢谢

以下是翻译好的内容:

我想遍历嵌套的JSON结构并从interface{}中获取每个键和值。

以下是要翻译的代码部分:

我想从以下结构中获取

{
    "tg": {
        "A": {
            "E": 100,
            "H": 14
        },
        "B": {
            "D": 1
        },
        "C": {
            "D": 1,
            "E": 1
        },
        "D": {
            "F": 1,
            "G": 1,
            "H": 1
        },
        "E": {
            "G": 1
        }
    }
}

我能够获取以下内容

a := js.Get("tg").Get("D").Get("F")
fmt.Println(*a) // {1}

但是在将其类型断言为整数时遇到了问题

invalid type assertion: (*a).(int)

如何遍历整个结构并获取每个字符映射的整数

谢谢
英文:

I want to traverse the nested JSON struct and get each key and value from the interface{}

http://play.golang.org/p/B-B3pejGJW

So I want from the following struct

    {
        "tg": {
            "A": {
                "E": 100,
                "H": 14
            },
            "B": {
                "D": 1
            },
            "C": {
                "D": 1,
                "E": 1
            },
            "D": {
                "F": 1,
                "G": 1,
                "H": 1
            },
            "E": {
                "G": 1
            }
        }
    }

I was able to get the following

a := js.Get("tg").Get("D").Get("F")
fmt.Println(*a) // {1}

but having trouble with type assert this to integer.

     invalid type assertion: (*a).(int)

How would would traverse this whole struct and get each integer mapped from the characters?

Thanks!

答案1

得分: 1

你的值将被转换为 float64 类型。此外,你没有访问 a.data,而是访问了一个结构体 a,这导致了错误。

fmt.Printf("%#v\n", a)              // &main.JSON{data:1}
fmt.Println(reflect.TypeOf(a.data)) // float64
x := int(a.data.(float64))
英文:

Your value will be marshalled into a float64. Plus you are not accessing a.data but a instead which is a struct which is causing the error.

fmt.Printf("%#v\n", a)              // &main.JSON{data:1}
fmt.Println(reflect.TypeOf(a.data)) // float64
x := int(a.data.(float64))

huangapple
  • 本文由 发表于 2014年3月6日 14:40:41
  • 转载请务必保留本文链接:https://go.coder-hub.com/22217019.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定