gjson常用使用方法

 

1、包路径:github.com/tidwall/gjson/(直接可以看这个链接,打开很慢,所以备份下)

2、获取单个标签值:

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())
}

输出结果:Prichard

3、路径匹配:

json数据

{
  "name": {"first": "Tom", "last": "Anderson"},
  "age":37,
  "children": ["Sara","Alex","Jack"],
  "fav.movie": "Deer Hunter",
  "friends": [
    {"first": "Dale", "last": "Murphy", "age": 44},
    {"first": "Roger", "last": "Craig", "age": 68},
    {"first": "Jane", "last": "Murphy", "age": 47}
  ]
}

匹配结果:

"name.last"          >> "Anderson"
"age"                >> 37
"children"           >> ["Sara","Alex","Jack"]
"children.#"         >> 3
"children.1"         >> "Alex"
"child*.2"           >> "Jack"
"c?ildren.0"         >> "Sara"
"fav\.movie"         >> "Deer Hunter"
"friends.#.first"    >> ["Dale","Roger","Jane"]
"friends.1.last"     >> "Craig"

 

friends.#[last=="Murphy"].first    >> "Dale"
friends.#[last=="Murphy"]#.first   >> ["Dale","Jane"]
friends.#[age>45]#.last            >> ["Craig","Murphy"]
friends.#[first%"D*"].last         >> "Murphy"

json数据: 

{"name": "Gilbert", "age": 61}
{"name": "Alexa", "age": 34}
{"name": "May", "age": 57}
{"name": "Deloise", "age": 44}

匹配结果: 

..#                   >> 4
..1                   >> {"name": "Alexa", "age": 34}
..3                   >> {"name": "Deloise", "age": 44}
..#.name              >> ["Gilbert","Alexa","May","Deloise"]
..#[name="May"].age   >> 57

 

 4、获取嵌套数组值:

{
  "programmers": [
    {
      "firstName": "Janet", 
      "lastName": "McLaughlin", 
    }, {
      "firstName": "Elliotte", 
      "lastName": "Hunter", 
    }, {
      "firstName": "Jason", 
      "lastName": "Harold", 
    }
  ]
}
result := gjson.Get(json, "programmers.#.lastName")
for _, name := range result.Array() {
	println(name.String())
}
name := gjson.Get(json, `programmers.#[lastName="Hunter"].firstName`)
println(name.String())  // prints "Elliotte"
result := gjson.Get(json, "programmers")
result.ForEach(func(key, value gjson.Result) bool {
	println(value.String()) 
	return true // keep iterating
})

5、判断某个值是否存在:

value := gjson.Get(json, "name.last")
if !value.Exists() {
	println("no last name")
} else {
	println(value.String())
}

// Or as one step
if gjson.Get(json, "name.last").Exists() {
	println("has a last name")
}

6、验证json格式

if !gjson.Valid(json) {
	return errors.New("invalid json")
}
value := gjson.Get(json, "name.last")
根据您提供的代码,我将为您提供使用 GoFrame 2.4.3 框架重构的建议。请注意,GoFrame 2.x 版本与 GoFrame 1.x 版本的 API 有所不同,请确保您的项目已正确导入了以下包: ```go import ( "github.com/gogf/gf/v2/encoding/gjson" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/gclient" "github.com/gogf/gf/v2/net/ghttp" "github.com/gogf/gf/v2/os/gfile" ) ``` 以下是使用 GoFrame 2.4.3 框架进行重构的代码: ```go func PutAdImage(res g.Map) { client := g.Client() url := "https://ad.oceanengine.com/open_api/2/file/image/ad/" token := "75b824425e25e16876a5467d8e072d058ea7ba04" client.SetHeader("Content-Type", "multipart/form-data") client.SetHeader("Access-Token", token) client.SetHeader("Connection", "Keep-Alive") client.SetHeader("Expect", "") client.SetHeader("User-Agent", "") response, err := client.Post(url, g.Map{ "advertiser_id": 1748895409387534, "upload_type": "UPLOAD_BY_FILE", "image_signature": gfile.Md5File(res["image_file"]), "image_file": gfile.NewFile(res["image_file"]), "filename": res["filename"], }) if err != nil { g.Log().Error(err) return } body := response.ReadAllString() g.Dump(body) } ``` 请注意,GoFrame 2.x 版本中的 `gclient` 包没有 `NewClient` 方法,而是使用全局的 `g.Client()` 方法来创建 `ghttp.Client` 对象。 另外,GoFrame 2.x 版本中的 `gfile` 扩展没有 `Md5` 方法,但提供了 `Md5File` 方法来计算文件的 MD5 值。 最后,使用 `response.ReadAllString()` 方法来获取响应体的内容。 请根据您的实际需求进行代码调整,并确保正确处理错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值