go 怎么遍历json数据_Go 语言 range 解析

range

range 关键字在 go 语言中是相当常用好用的语法糖,可以用在 for 循环中迭代 arrayslicemapchannel字符串所有涉及到遍历输出的东西。

基本原理
怎么用?

我们在前一节循环中初次触及到了 range,也知道他可以省略key,或者省略value来循环遍历的特性,但是这种特性要结合实际情况考量该用哪一个。

切片迭代

 nums := []int{
    1, 2, 3}
 for k, v := range nums {
  fmt.Printf("key: %v , value: %v  \n", k, v)
 }

这和迭代方式非常适合用for-range语句,如果减少赋值,直接索引num[key]可以减少损耗。如下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在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") } }) } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值