在 web 编程中很多情况下接口的数据是 json 格式,在我们拿到接口的 json 数据后如何方便地从中提取出需要的字段呢?我们可以自定义一个结构体,然后通过 Golang 的标准库 json 解析到我们定义的结构体中。但是当 json 格式比较复杂,嵌套层级比较深的时候,还是用这种方法就比较麻烦了。在这里推荐一个包:
gojsonq
,可以很简便地从 json 串中提取出需要的字段,无需定义额外的结构体,然后解析,直接链式地从 json 串中提取需要的字段即可,有点类似动态语言:
go get github.com/thedevsaddam/gojsonq/v2
示例一:从如下 json 串中提取 name.first 字段数据
"name":{
"first":"Tom",
"last":"Hanks"
"age":61
Find 方法返回的结果为 interface{} 类型。
package main
import gojsonq "github.com/thedevsaddam/gojsonq/v2"
func main() {
const json = `{"name":{"first":"Tom","last":"Hanks"},"age":61}`
name := gojsonq.New().FromString(json).Find("name.first")
println(name.(string)) // Tom
示例二:从如下 json 串中提取 temperatures 字段数据,并计算平均值
"city":"dhaka",
"type":"weekly",
"temperatures":[
39.9,
35.4,
33.5,
31.6,
33.2,
支持列表计算:
package main
import (
"fmt"
gojsonq "github.com/thedevsaddam/gojsonq/v2"
func main() {
const json = `{"city":"dhaka","type":"weekly","temperatures":[30,39.9,35.4,33.5,31.6,33.2,30.7]}`
avg := gojsonq.New().FromString(json).From("temperatures").Avg()
fmt.Printf("Average temperature: %.2f", avg)
示例三:从如下 json 串中提取 data.pageNumber 数组,赋值给 Golang 整型数组
上面的例子提取简单的数值类型,返回的是 interface{} 类型,可以通过类型断言得到需要的数据。如果提取的是数组类型,是无法通过类型断言来获取 interface{} 类型的值的,可以使用 FindR 拿到结果,然后通过结果的 As 方法将数据解析到我们定义的变量类型中。
"code":"0",
"message":"success",
"data":{
"thumb_up":0,
"system":0,
"im":0,
"avatarUrl":"https://profile.csdnimg.cn/F/4/B/helloworld",
"invitation":0,
"comment":0,
"follow":0,
"totalCount":0,
"coupon_order":0,
"pageNumbers":[
"status":true
func main() {
jsonStr := `{
"code":"0",
"message":"success",
"data":{
"thumb_up":0,
"system":0,
"im":0,
"avatarUrl":"https://profile.csdnimg.cn/F/4/B/helloworld",
"invitation":0,
"comment":0,
"follow":0,
"totalCount":0,
"coupon_order":0,
"pageNumbers":[
"status":true
pageNumbers := make([]int, 0)
result, err := gojsonq.New().FromString(jsonStr).FindR("data.pageNumbers")
if err != nil {
fmt.Println(err)
err = result.As(&pageNumbers)
if err != nil {
fmt.Println(err)
fmt.Println(pageNumbers)
更多功能及示例见官方文档:
https://github.com/thedevsaddam/gojsonq/wiki/Queries
Golang 从 Json 串中快速取出需要的字段在 web 编程中很多情况下接口的数据是 json 格式,在我们拿到接口的 json 数据后如何方便地从中提取出需要的字段呢?我们可以自定义一个结构体,然后通过 Golang 的标准库 json 解析到我们定义的结构体中。但是当 json 格式比较复杂,嵌套层级比较深的时候,还是用这种方法就比较麻烦了。在这里推荐一个包: gojsonq,可以很简便地从 json 串中提取出需要的字段,无需定义额外的结构体,然后解析,直接链式地从 json 串中提取需要的字
G
oJSON
G
oJSON是一个
快速而简单的包,用于在
json 中编组/解组结构体。 您可以使用G
oJSON工具生成编组/解组代码,在基准测试中, G
oJSON的生成代码几乎比encoding/
json快 6~7 倍。
# install
go get - u - v github . com / go - fish / g
ojson
cd ${ GOPATH } / src / github . com / go - fish / g
ojson / cmd
go build - o g
ojson main . go
# usage
g
ojson [ options ] < input dir | file >
- inline
Use inline function in generate code ( default true )
1.json-iterator介绍
jsoniter ( json-iterator )是一款快且灵活的 JSON 解析器,同时提供 Java 和 Go 两个版本Jsoniter 是最快的 JSON 解析.
器。它最多能比普通的解析器快 10 倍之多,即使在数据绑定的用法下也有同样的性能优势。
golang中的跑分:
2.提取Json指定字段数据
有时候,例如一个JSON对象很大...
JSON(JavaScript Object Notation)是一种基于JavaScript语法子集的开放标准数据交换格式。
JSON是基于文本的,轻量级的,通常被认为易于读/写。
Json是一种比XML更轻量级的数据交换格式,更适合成为较为理想,跨平台,跨语言的数据交换语言,成为项目配置文件的首选。开发者可以用
Json传输简单的字符串,数字,布尔值,也可以传输一个数组...
最近在操作json数据上遇到一些有趣的东西,之前以为最复杂不过就是JSON.parse和JSON.stringify。在做项目的时候有一个需求,后台返回的数据是所有类型的值,而我需要将它们分类,同一类型为一组,然后再截取我需要的字段。做法是var aSearch = [];
var aTemp = data.filter(function(i){
return i.dataType.inc...
JavaScript对象简谱(JSON, Java Script Object Notation)是一种用于发送和接收结构化信息的标准协议。在类似的协议中,JSON并不是唯一的一个标准协议。 XML(§7.14)、ASN.1和Google的Protocol Buffers都是类似的协议,并且有各自的特色,但是由于简洁性、可读性和流行程度等原因,JSON是应用最广泛的一个。
Go语言对于这些标准格式的编码和解码都有良好的支持,由标准库中的encoding/json、encoding/xml、enco
比如现在数组里面是:"TJ-8122A-F";"2019-11-19 11:14:28";"19092401";"猪浓缩-8122A/8296T";"ALA";"1.68";"1.55";"0.42";
注意里面是 ; 符号分割的 。。。。
func main() {
arry = " "TJ-8122A-F";"2019-11-19 11:14:28";"19092401";...
在 golang 中,将字符串转换为 json 格式时,会自动将一些特殊字符添加反斜杠进行转义,如双引号、反斜杠、换行符等。这样做是为了避免这些特殊字符对 json 格式的解析产生干扰。
但有些时候,我们需要将这些转义字符去掉,得到原始的字符串内容。这时可以使用 strconv 包中的 Unquote() 函数。
Unquote() 函数会将字符串中表示转义字符的反斜杠去除,并将实际的字符转义为其对应的 ASCII 字符。如果字符串不是以双引号包裹的,则会返回一个错误。
示例代码如下:
package main
import (
"fmt"
"strconv"
func main() {
jsonStr := `{"name":"golang","version":"1.16"}`
fmt.Println(jsonStr)
unquotedStr, err := strconv.Unquote(jsonStr)
if err != nil {
fmt.Println(err)
return
fmt.Println(unquotedStr)
输出结果如下:
{"name":"golang","version":"1.16"}
{name:golang,version:1.16}
可以看到,经过 Unquote() 处理后,字符串中的双引号已经去掉了,而转义的字符也被正确还原。
CSDN-Ada助手:
docker-compose 启动 Redis 服务
2018.11.13:
C++中rdbuf()简介及文件流的概念
秋山玉佩:
Kubernetes 基于 EFK 技术栈的日志收集实践
iolahkuy:
Kong 微服务网关在 Kubernetes 的实践
m0_51498881: