如何解析以下两个JSON并打印“ c”值
1)
{
"a": {
"b": {
"c": 123
},
"b": {
"c": 456
}
}
}
2)
{
"a": {
"b": {
"c": 444
}
}
}
下面的结构帮助解析,但然后如何遍历b,它不是数组?请帮忙。
type Data struct {
A struct {
B struct {
C int `json:"c"`
} `json:"b"`
} `json:"a"`
}
感谢CeriseLimón和Minji
有一个JSON.RawMessage类型可以解决以下问题:从第三方API接收到无效的JSON格式,因此无法进行更改。
package main
import (
"encoding/json"
"fmt"
"log"
"strings"
)
type DatainC struct {
C int `json:"c"`
}
type Data struct {
A json.RawMessage `json:"a"`
}
func main() {
blob := `{
"a": {
"b": {
"c": 123
},
"b": {
"c": 456
}
}
}`
var abc Data
if err := json.Unmarshal([]byte(blob), &abc); err != nil {
log.Fatal(err)
}
data, _ := abc.A.MarshalJSON()
//log.Println("JSON Data", string(data))
dec := json.NewDecoder(strings.NewReader(string(data)))
// read open bracket
t, err := dec.Token()
if err != nil {
log.Fatal(err)
}
fmt.Printf("%T: %v\n", t, t)
for dec.More() {
t1, err1 := dec.Token()
if err1 != nil {
log.Fatal(err1)
}
if t1 == "b" {
var c DatainC
err2 := dec.Decode(&c)
if err2 != nil {
log.Fatal(err2)
}
fmt.Println("Value of C - ", c.C)
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句