GoLand解析json获取指定字段内容


本文摘自网络,作者wangcheng,侵删。

根据字节切片动态解析json指定字段,初学go可以相互多交流,不妥之处请留言说明,我会及时改正

data.json

{
    "basic_info":{
        "upload_date":"2021-04-25 14:17:05.974168",
        "device_id":"AUTH",
        "tss":{
            "date":"2021",
            "system_version":{
                "system":"1.7.1",
                "plug":"1.7.3",
                "patch":"1.7.22"
            }
        }
    }
}

code.go

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
)

/**
 * 获取json字符串中指定字段内容  ioutil.ReadFile()读取字节切片
 * @param    bytes    json字符串字节数组
 * @param    field    可变参数,指定字段
 */
func getJsonField(bytes []byte, field ...string) []byte {
    if len(field) < 1 {
        fmt.Printf("At least two parameters are required.")
        return nil
    }

    //将字节切片映射到指定map上  key:string类型,value:interface{}  类型能存任何数据类型
    var mapObj map[string]interface{}
    json.Unmarshal(bytes, &mapObj)
    var tmpObj interface{}
    tmpObj = mapObj
    for i := 0; i < len(field); i++ {
        tmpObj = tmpObj.(map[string]interface{})[field[i]]
        if tmpObj == nil {
            fmt.Printf("No field specified: %s ", field[i])
            return nil
        }
    }

    result, err := json.Marshal(tmpObj)
    if err != nil {
        fmt.Print(err)
        return nil
    }
    return result
}

func main() {
    bytes, _ := ioutil.ReadFile("/tmp/data.json")
    s := getJsonField(bytes, "basic_info", "tss")
    fmt.Println(string(s))
}

结果输出

root@Sangfor:/tmp/go_code# go run code.go 
{"date":"2021","system_version":{"patch":"1.7.22","plug":"1.7.3","system":"1.7.1"}}


相关阅读 >>

Golang语言可以做些什么

Go的值类型和引用类型2——内存分配规则

Go微服务入门到容器化实践,落地可观测的微服务电商项目

Go语言中的不定参数类型是什么意思

将 5 万行 java 代码移植到 Go 学到的经验

一文搞懂如何实现 Go 超时控制

手撸Golang Go与微服务 saga模式之6

Golang判断字符串是否为空的方法

基于 mysql 分布式锁,防止多副本应用初始化数据重复

Golang底层是c语言吗?

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...