golang的基础json解析;文件读取json

15 篇文章 0 订阅

一、基础json解析


package main

import (
        "log"
        "encoding/json"
)

/*  json解析时需要结构体成员大写开头,不然就被忽略  */
type rtspUrl struct {
    Url   string	
}


func main(){
        var message string = "{\"url\": \"rtsp://192.168.1.156:554/testStream.sdp\"}"
        var mUrl rtspUrl

        json.Unmarshal([]byte(message), &mUrl)
        log.Println("got message:", string(message), "  ", mUrl.Url)
}

结果:

[root@jn json]# go run json.go
2021/09/27 21:08:55 got message: {"url": "rtsp://192.168.1.156:554/testStream.sdp"}    rtsp://192.168.1.156:554/testStream.sdp
[root@jn json]#

二、文件读取json

readConfig.go:

package main

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

/* json解析时需要结构体成员大写开头,不然就忽略解析 ,后面的多余字符串提示 json 对应 key 值(变量不对应时有用) */
type ConfigSt struct {
    Service string `json:"service"`
    Version string `json:"version"`
    Apps    map[string]app `json:"apps"`
}

type app struct {
    Name string `json:"name"`
}

/* json解析时需要结构体成员大写开头,不然就忽略解析 */
func main() {

    log.Println("Config File Read with Json Format~")

    data, err := ioutil.ReadFile("config.json")
    if nil != err  {
        log.Fatalln("ReadFile ERROR:", err)
        return
    } else {
        log.Println("ReadFile OK :\r\n", string(data))
    }

    var appConfig ConfigSt
    err = json.Unmarshal(data, &appConfig)
    if nil != err {
        log.Fatalln("Unmarshal ERROR:", err)
        return
    } else {
        log.Println("service:", appConfig.Service)
        log.Println("version:", appConfig.Version)
        for k, v := range appConfig.Apps {
            log.Println(k, " :", v.Name)
        }
    }
}

config.json:

{
 "service": "appManager",
 "version": "v1.0.1",
 "apps": {
   "game0": {
    "name": "ice game"
   },
   "game1": {
    "name": "fire game"
   }
 }
}

运行:

[root@jn jsonFromFile]# ls
config.json  readConfig.go
[root@jn jsonFromFile]# go run readConfig.go
2021/11/03 19:59:19 Config File Read with Json Format~
2021/11/03 19:59:19 ReadFile OK :
 {
 "service": "appManager",
 "version": "v1.0.1",
 "apps": {
   "game0": {
    "name": "ice game"
   },
   "game1": {
    "name": "fire game"
   }
 }
}

2021/11/03 19:59:19 service: appManager
2021/11/03 19:59:19 version: v1.0.1
2021/11/03 19:59:19 game0  : ice game
2021/11/03 19:59:19 game1  : fire game
[root@jn jsonFromFile]#

三、原生json拉胯,gjson挺好用

package main

import "github.com/tidwall/gjson"

const json = `{"name":{"first":"Janet","last":"Prichard"},"age":47}`

func main() {
        value := gjson.Get(json, "name.last")
        println(value.String())
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值