重庆建网站流程/百度相册登录入口
GJSON 是一个 Go 包,它提供了一种快速而简单的方法来从 json 文档获取值。它具有单行搜索、点符号路径、迭代和解析 json 行等功能。
GJSON
也可用于Python和Rust
入门
安装中
要开始使用GJSON
请安装 Go
并运行 go get
:
$ go get -u github.com/tidwall/gjson
获取一个值
获取json中搜索指定路径。路径采用点语法,例如“name.last”或“age”。当找到该值时,它会立即返回。
package mainimport "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
还有用于一次获取多个值的GetMany函数,以及用于处理 JSON 字节切片的GetBytes 。
路径语法
下面是路径语法的快速概述,有关更完整的信息,请查看 GJSON 语法。
路径是一系列由点分隔的键。键可以特殊通配符“*”和“?”。要访问集群中的元素数,请使用索引作为键。要获取集群中的元素数或访问子路径,请使用“# ”字符。点和通配符可以用“\”转义。
{"name": {"first": "Tom", "last": "Anderson"},"age":37,"children": ["Sara","Alex","Jack"],"fav.movie": "Deer Hunter","friends": [{"first": "Dale", "last": "Murphy", "age": 44, "nets": ["ig", "fb", "tw"]},{"first": "Roger", "last": "Craig", "age": 68, "nets": ["fb", "tw"]},{"first": "Jane", "last": "Murphy", "age": 47, "nets": ["ig", "tw"]}]
}
"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"
您还可以使用查询数据库中的第一个匹配项#(...)
,或使用查找所有匹配项#(...)#
。查询支持==
、!=
、<
、<=
、>
、>=
比较仿真以及简单模式匹配%
(like)和!%
(not like)。
friends.#(last=="Murphy").first >> "Dale"
friends.#(last=="Murphy")#.first >> ["Dale","Jane"]
friends.#(age>45)#.last >> ["Craig","Murphy"]
friends.#(first%"D*").last >> "Murphy"
friends.#(first!%"D*").last >> "Craig"
friends.#(nets.#(=="fb"))#.first >> ["Dale","Roger"]
请注意,在 v1.3.0 之前,查询使用#[…]逗号。这在 v1.3.0 中进行了更改,小区与新的 多路径语法不一致。为了兼容, #[…]将继续工作直到下一个主要版本。
结果类型
GJSON 支持 json 类型string、number、bool和null。恢复和恢复对象原始 json 类型返回。
该Result类型包含以下之一:
bool, for JSON booleans
float64, for JSON numbers
string, for JSON string literals
nil, for JSON null
直接访问该值:
result.Type // can be String, Number, True, False, Null, or JSON
result.Str // holds the string
result.Num // holds the float64 number
result.Raw // holds the raw json
result.Index // index of raw value in original json, zero means index unknown
result.Indexes // indexes of all the elements that match on a path containing the '#' query character.
有多种方便的函数可以处理结果:
result.Exists() bool
result.Value() interface{}
result.Int() int64
result.Uint() uint64
result.Float() float64
result.String() string
result.Bool() bool
result.Time() time.Time
result.Array() []gjson.Result
result.Map() map[string]gjson.Result
result.Get(path string) Result
result.ForEach(iterator func(key, value Result) bool)
result.Less(token Result, caseSensitive bool) bool
该result.Value()
函数返回一个interface{}
需要类型断言的并且是以下 Go 类型之一:
boolean >> bool
number >> float64
string >> string
null >> nil
array >> []interface{}
object >> map[string]interface{}
该result.Array()
函数返回一个值数据库。如果结果表示不存在的值,则将返回一个空数据库。如果结果不是 JSON 数据库,则返回值将是支持一个结果的数据库。
64位整数
和调用能够读取所有64位,从而允许使用大型JSON整数result.Int()。result.Uint()
result.Int() int64 // -9223372036854775808 to 9223372036854775807
result.Uint() uint64 // 0 to 18446744073709551615
简单解析并获取
有一个Parse(json)函数可以执行简单的解析,然后result.Get(path)结果搜索。
例如,所有这些都会返回相同的结果:
gjson.Parse(json).Get("name").Get("last")
gjson.Get(json, "name").Get("last")
gjson.Get(json, "name.last")
检查值是否存在
有时您只是想知道某个值是否存在。
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")
}
验证 JSON
并且Get函数Parse期望 json 格式良好。错误的 json 不会恐慌,但可能会返回意外的结果。
如果您从不可预测的来源使用 JSON,那么您可能需要在使用 GJSON 之前进行验证。
if !gjson.Valid(json) {return errors.New("invalid json")
}
value := gjson.Get(json, "name.last")
解析到Map
解组为map[string]interface{}
:
m, ok := gjson.Parse(json).Value().(map[string]interface{})
if !ok {// not a map
}
解析使用[]byte
如果您的 JSON 包含在[]byte切片中,则可以使用GetBytes函数。这比Get(string(data), path)。
var json []byte = ...
result := gjson.GetBytes(json, path)
如果您正在使用该gjson.GetBytes(json, path)
函数并且希望避免转换result.Raw
为 a []byte
,那么您可以使用以下模式:
var json []byte = ...
result := gjson.GetBytes(json, path)
var raw []byte
if result.Index > 0 {raw = json[result.Index:result.Index+len(result.Raw)]
} else {raw = []byte(result.Raw)
}
这是原始 json 的消耗而得到的无分配子切片。该方法利用了result.Index
字段,该字段是原始数据在原始 json 中的位置。的值可能result.Index
为零,在这种情况下result.Raw
会转换为[]byte
。
一次获得多个值
该GetMany
函数可用于同时获取多个值。
results := gjson.GetMany(json, "name.first", "name.last", "age")
返回值是 a []Result
,将始终包含与输入路径两个数量的项目。
相关文章:

Golang-GJSON 快速而简单的方法来从 json 文档获取值
GJSON 是一个 Go 包,它提供了一种快速而简单的方法来从 json 文档获取值。它具有单行搜索、点符号路径、迭代和解析 json 行等功能。 GJSON 也可用于Python和Rust 入门 安装中 要开始使用GJSON 请安装 Go 并运行 go get : $ go get -u github.com/ti…...

echarts根据x轴数据长度判断是否倾斜展示/柱状图上方显示数字
showChart1() { // 通过id初始化let chart1 echarts.init(document.getElementById(this.idName))var option {// 到容器的距离grid: {top: 18,left: 0,right: 4,bottom: 0,},xAxis: [{type: category,data: this.xData,axisLine: {lineStyle: {color: rgba(255, 255, 255, .…...

Eviews用向量自回归模型VAR实证分析公路交通通车里程与经济发展GDP协整关系时间序列数据和脉冲响应可视化...
全文下载链接:http://tecdat.cn/?p27784 河源市是国务院1988年1月7日批准设立的地级市,为了深入研究河源市公路交通与经济发展的关系,本文选取了1988-2014年河源市建市以来24年的地区生产总值(GDP)和公路通…...

群晖NAS:通过Docker 部署宝塔面板【注册表:cyberbolt/baota】
群晖NAS:通过 Docker 部署宝塔面板【注册表:pch18/baota】 由于 docker 源地址被墙,在面板里面查询不到注册表,使用 ssh 命令行拉取 1、打开 SSH,链接后打开命令行 这里不赘述,具体自行百度 2、下载 镜像…...

pdfjs在线预览组件的使用
前言 pdfjs在线预览组件。 原生浏览器预览pdf文件,存在pdf xss跨站攻击风险。推荐使用pdfjs第三方组件在线预览pdf文件。 如何使用 下载 官方插件下载地址:https://mozilla.github.io/pdf.js/getting_started/ 安装 把下载的文件复制到项目中 使用pd…...

python线程、协程
线程 创建线程对象 from threading import Threadt Thread() # 功能:创建线程对象 # 参数:target 绑定线程函数 # args 元组 给线程函数位置传参 # kwargs 字典 给线程函数键值传参启动线程 t.start() # 启动线程回收线程 t.join([timeout]) # …...

AttributeError: module ‘OpenSSL.SSL’ has no attribute ‘SSLv3_METHOD
这个错误是由于在OpenSSL.SSL模块中找不到SSLv3_METHOD属性导致的。解决这个问题的方法如下: 首先,确保你已经安装了最新版本的cryptography和pyOpenSSL。你可以使用以下命令卸载并重新安装它们: 卸载cryptography:pip uninstall …...

DTCC 2023丨云原生环境下,需要什么样的 ETL 方案?
2023年8月16日~18日,第14届中国数据库技术大会(DTCC 2023)于北京隆重召开,拓数派受邀参与本次大会,PieCloudDB 技术专家邱培峰在大会做了《云原生虚拟数仓 PieCloudDB ETL 方案设计与实现》的主题演讲,详…...

在UE4虚幻引擎中加入导航网格体边界体积后丧尸不能移动和发现玩家
UE4系列文章目录 文章目录 UE4系列文章目录前言一、用到的知识点二、问题原因 前言 最近使用ue4做第一人称视角射击游戏发现问题,加入导航网格体边界体积后丧尸不能移动和发现玩家。下图是出现的问题图片 一、用到的知识点 1.行为树:控制并显示AI的决…...

华为数通方向HCIP-DataCom H12-821题库(单选题:221-240)
第201题 BGP 协议用 beer default-route-advertise 命令来给邻居发布缺省路由,那么以下关于本地 BGP 路由表变化的描述,正确的是哪一项? A、在本地 BGP 路由表中生成一条活跃的缺省路由并下发给路由表 B、在本地 BGP 路由表中生成一条不活跃的缺省路由,但不下发给…...

aarch64 arm64 部署 stable diffusion webui 笔记 【1】准备 venv 安装pytorch 验证cuda
aarch64 pytorch(没有aarch64对应版本,自行编译) pytorch-v2.0.1 cuda arm64 aarch64 torch 2.0.1cu118 源码编译笔记【2】验证cuda安装 成功_hkNaruto的博客-CSDN博客 创建venv [rootceph3 stable-diffusion-webui]# /usr/local/Python-3.10.12/bin/python3 -m v…...

从方法到目标了解什么是机器学习?
一、什么是机器学习 1、简述 机器学习是 人工智能(AI) 和计算机科学的一个分支,专注于利用数据和算法来模仿人类的学习方式,逐步提高其准确性。过去几十年来,存储和处理能力方面的技术进步催生了一些基于机器学习的创新产品,例如 Netflix 的推荐引擎和自动驾驶汽车。 机…...

Devos勒索病毒:网络安全的新威胁,勒索病毒解密,数据恢复
随着信息技术的飞速发展,网络安全问题日益凸显。近年来,一种名为Devos的勒索病毒在全球范围内肆虐,给企业和个人带来了极大的损失。本文将详细介绍Devos勒索病毒的特点、传播途径以及预防和应对措施,帮助大家更好地认识和防范这一…...

go语言的高级特性
go语言调用C语言 go tool cgo main.go...

华为VRP系统基本操作
1.实验目的 掌握一些常见的路由命令。 2.实验步骤 查看设备版本信息 display version 修改设备的名字 进入系统视图 system-view修改设备名称 sysname Datacom-Router进入接口视图 int g0/0/1进入到接口GigabitEthernet0/0/1的视图 interface GigabitEthernet 0/0/1dis…...

Milvus Cloud扩展变更:为向量数据库注入前沿增强功能
在向量数据库的不断变化中,Milvus Cloud已成为一个改变游戏规则的先锋,革新了我们存储、搜索和分析复杂向量数据的方式。通过最新版本的Milvus Cloud2.3.0,引入了一系列重要的增强和修改,为更强大、更高效的向量数据库解决方案铺平了道路。在本文中,我们将深入探讨Milvus …...

外观模式简介
概念: 外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口。外观模式隐藏了子系统的复杂性,并将其封装在一个简单易用的接口中,使得客户端可以…...

web pdf 拖拽签章
web pdf 拖拽签章 主要通过火狐的pdfjs 来实现 1. 下载js 并编译 地址 https://mozilla.github.io/pdf.js/ 按照官网当下下载并编译就得到了js 2.其实也没有什么好讲的,都是用的js中的方法,官网中都有 按照步骤就能生成一个document元素,然…...

SQLAlchemy 库创建数据库引擎和会话工厂附带SQLSERVER驱动版本确认方式
SQLAlchemy 库创建数据库引擎和会话工厂 from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker# 创建数据库引擎 engine create_engine(mssqlpyodbc://user:passhost:port/database?driverODBCDriver11forSQLServer)# 创建会话工厂 Session sess…...

用Python登录账户
1 问题 如何利用python登录账户? 2 方法 账户和密码存放在文件夹中从文件夹中读取并比较密码密文验证三次后,如不成功则锁定用户 通过。。。。。。。。等证明提出的方法是有效的,能够解决开头提出的问题。 代码清单 1 import osimport getpas…...

梳理下我自已对Reactor与及IO多路复用的select\poll\epoll的理解
Reactor是一种设计思想的落地,其中IO多路复用的具体落地:select\poll\epoll。都是基于Reactor的延伸。它的核心是Reactor与资源处理器。Reactor负责监听与事件的分发,事件包括连接事件、读事件、写事件。 具体的流程是系统调用监听请求&…...

4. 广播变量
一、分区规则(DataStream Broadcast)和广播变量(Flink Broadcast) 1.1 DataStream Broadcast(分区规则) 分区规则是把元素广播给所有的分区,数据会被重复处理。 DataStream.broadcast()1.…...

GPT 内部 — I : 了解文本生成
年轻的陀思妥耶夫斯基被介绍给生成AI,通过Midjourney创建 一、说明 我经常与不同领域的同事互动,我喜欢向几乎没有数据科学背景的人传达机器学习概念的挑战。在这里,我试图用简单的术语解释 GPT 是如何连接的,只是这次是书面形式。…...

平板触控笔哪款好用?好用的第三方apple pencil
而对于那些把ipad当做学习工具的人而言,苹果Pencil就成了必备品。但因为苹果Pencil太贵了,不少的学生们买不起。因此,最佳的选择还是平替电容笔,今天在这里整理了一些高性价比的电容笔! 一、挑选电容笔的要点…...

Mac 上更新系统PATH环境变量
目录 为什么要更新系统的PATH环境变量如何更新系统的PATH环境变量1. 确保你知道工具的实际安装位置。2. 将目录(实际安装位置)添加到PATH:export PATH$PATH:/path/to/your/tools补充:通过以下方法来确定当前正在使用的是Bash还是Z…...

Visual Studio Code 终端配置使用 MySQL
Visual Studio Code 终端配置使用 MySQL 找到 MySQL 的 bin 目录 在导航栏中搜索–》服务 找到MySQL–>双击 在终端切换上面找到的bin目录下输入指令 终端为Git Bash 输入命令 ./mysql -u root -p 接着输入密码,成功在终端使用 MySQL 数据库。...

12 | 使用 Spark SQL执行CURL
Spark SQL 是 Apache Spark 生态系统中的一个组件,它提供了用于结构化数据处理和分析的高级接口。Spark SQL 可以让用户使用 SQL 语言来查询和操作数据,同时也提供了强大的分布式计算能力。下面是关于 Spark SQL、SparkSession 和 DataFrame 的关键点: 1. Spark SQL: 定义…...

容器编排学习(七)控制器介绍与使用
一 控制器 控制器是 k8s内置的管理工具。可以帮助用户实现 Pod的自动部署、自维护、扩容、滚动更新等功能的自动化程序。 为什么要使用控制器? 有大量的 Pod需要维护管理需要维护 Pod的健康状态控制器可以像机器人一样可以替用户完成维护管理的工作 二 Deployment 1 概…...

一文看懂微信小程序新版隐私协议(附带弹窗组件)
一、前言 微信小程序近期又迎来了一次改革–9月15日之后如果小程序涉及调用微信的隐私接口获取用户的信息的,需要用户手动同意协议后才可正常调用接口,否则会返回报错信息。 隐私接口目前常用的有:手机号快捷获取、读取照片、获取用户的头像…...

Java认识异常(超级详细)
目录 异常的概念和体系结构 异常的概念 异常的体系结构 异常的分类 1.编译时异常 2.运行时异常 异常的处理 防御式编程 LBYL EAFP 异常的抛出 异常的捕获 异常声明throws try-catch捕获并处理 finally 异常的处理流程 异常的概念和体系结构 异常的概念 在Java中…...