go解析json字符串不确定的key

go解析json字符串不确定的key

package main

import (
	"encoding/json"
	"fmt"
)

//检查map里面是否存在某个key,返回字符串
func mapExist(m map[string]interface{}, key string) string {
	if _, ok := m[key]; ok {
		return fmt.Sprintf("%v",m[key])
	} else {
		return ""
	}
}

//解析json字符串成 map
func jsonStringToMap(jsonStr string) (m map[string]interface{}, err error) {
	a := map[string]interface{}{}
	unmarsha1Err := json.Unmarshal([]byte(jsonStr), &a)
	if unmarsha1Err != nil {
		return nil, unmarsha1Err
	}
	fmt.Println(unmarsha1Err, "转换结果", a)
	return a, nil
}
func main() {
	str := "{\"Name\":\"denny\",\"Age\":18}"
	m, err := jsonStringToMap(str)
	if err != nil {
		fmt.Println("jsonStringToMap出错", err)
	}

	name := mapExist(m, "Name")
	if name != "" {
		fmt.Println("key=name的值是:", name)
	} else {
		fmt.Println("key=name的值不存在!!!")
	}

	age := mapExist(m, "Age")
	if age != "" {
		fmt.Println("key=Age的值是:", age)
	} else {
		fmt.Println("key=Age的值不存在!!!")
	}

}

思路是先把json字符串转换成map,然后再判断map是否存在某个key

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、付费专栏及课程。

余额充值