go 迭代器解析json
时间: 2023-10-29 08:05:39 浏览: 321
在Go语言中,可以使用fastjson库来解析JSON数据。该库提供了迭代器的功能,可以通过迭代器来遍历JSON数据。具体步骤如下:
1. 使用fastjson库的Parse方法将JSON字符串解析为fastjson.Value类型的对象。
2. 使用fastjson.Value对象的GetObject方法获取JSON对象。
3. 使用fastjson.Object对象的Visit方法遍历JSON对象的所有键值对。
4. 在Visit方法中,可以使用fastjson.Value对象的GetType方法获取值的类型,使用GetStringBytes方法获取字符串类型的值,使用GetInt方法获取整数类型的值,使用GetFloat方法获取浮点数类型的值,使用GetBool方法获取布尔类型的值,使用GetArray方法获取数组类型的值,使用GetObject方法获取对象类型的值。
5. 如果JSON数据中包含嵌套的对象或数组,可以使用递归的方式来遍历所有的键值对。
示例代码如下:
```
import (
"fmt"
"github.com/valyala/fastjson"
)
func main() {
jsonStr := `{"name": "Alice", "age": 20, "address": {"city": "Beijing", "country": "China"}, "hobbies": ["reading", "traveling"]}`
value, err := fastjson.Parse(jsonStr)
if err != nil {
fmt.Println(err)
return
}
value.GetObject().Visit(func(key []byte, v *fastjson.Value) {
fmt.Printf("%s: ", key)
switch v.Type() {
case fastjson.TypeString:
fmt.Printf("%s\n", v.GetStringBytes())
case fastjson.TypeNumber:
fmt.Printf("%d\n", v.GetInt())
case fastjson.TypeFloat:
fmt.Printf("%f\n", v.GetFloat())
case fastjson.TypeBool:
fmt.Printf("%t\n", v.GetBool())
case fastjson.TypeArray:
fmt.Printf("[")
for i, e := range v.GetArray() {
if i > 0 {
fmt.Printf(", ")
}
switch e.Type() {
case fastjson.TypeString:
fmt.Printf("%s", e.GetStringBytes())
case fastjson.TypeNumber:
fmt.Printf("%d", e.GetInt())
case fastjson.TypeFloat:
fmt.Printf("%f", e.GetFloat())
case fastjson.TypeBool:
fmt.Printf("%t", e.GetBool())
}
}
fmt.Printf("]\n")
case fastjson.TypeObject:
fmt.Printf("{\n")
v.GetObject().Visit(func(key []byte, v *fastjson.Value) {
fmt.Printf(" %s: ", key)
switch v.Type() {
case fastjson.TypeString:
fmt.Printf("%s\n", v.GetStringBytes())
case fastjson.TypeNumber:
fmt.Printf("%d\n", v.GetInt())
case fastjson.TypeFloat:
fmt.Printf("%f\n", v.GetFloat())
case fastjson.TypeBool:
fmt.Printf("%t\n", v.GetBool())
}
})
fmt.Printf("}\n")
}
})
}
```
阅读全文
相关推荐


















