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看什么书

优雅的实现 Golang rest api 架构

Go-grpc-rest环境搭建

java和Golang对比

关于Golang当中对select的理解

[Go-linq]-Go的.net linq式查询方法

分布式定时任务执行器

Golang怎么判断字符串是否为空

我的第一个Go程序:hello.Go

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




打赏

取消

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

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

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

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

评论

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