当前位置: 首页 > news >正文

go使用gjson操作json数据

gjson使用

  • gjson介绍
  • 安装gjson库
  • 解析 JSON 字符串
  • 路径语法
  • 复杂查询
  • 遍历和修改
  • 结论

gjson介绍

gjson 是一个 Go 语言库,用于快速解析 JSON 数据。它提供了非常简洁的 API 来查询 JSON 数据,无需预先定义 Go 结构体或映射(map)来匹配 JSON 结构。这使得 gjson 成为处理动态或未知结构的 JSON 数据的理想选择。

安装gjson库

go get -u github.com/tidwall/gjson

解析 JSON 字符串

package main  import (  "fmt"  "github.com/tidwall/gjson"  
)  func main() {  jsonString := `{"name":"Jason", "age":34, "city":"南京", "address":"紫东创意园"}`  // 获取 "name" 字段的值  name := gjson.Get(jsonString, "name").String()  fmt.Println("Name:", name)  // 获取 "age" 字段的值  age := gjson.Get(jsonString, "age").Int()  fmt.Println("Age:", age)// 获取 "address" 字段的值  address := gjson.Get(jsonString, "address").String()  fmt.Println("Address:", address)  // 尝试获取不存在的字段,并处理结果  nonExist := gjson.Get(jsonString, "non_exist").String()  if nonExist == "" {  fmt.Println("Non-exist field is empty or not found.")  }  // 处理数组jsonArray := `{"fruits":["apple","banana","cherry"]}`  firstFruit := gjson.Get(jsonArray, "fruits.0").String()  fmt.Println("First Fruit:", firstFruit)  
}

路径语法

gjson 使用类似 XPath 的语法来查询 JSON 数据。一些基本的路径示例包括:
.name:访问顶层对象的 name 字段。
.store.book[0].title:访问 store 对象中 book 数组的第一个元素的 title 字段。
#.name:在 JSON 对象的任何层级中搜索 name 字段的第一个匹配项(使用 # 表示递归搜索)。

复杂查询

gjson 还支持更复杂的查询,如使用 | 操作符进行多路径查询,或使用 @this 引用当前节点等。

遍历和修改

需要注意的是,gjson 主要用于查询和解析 JSON 数据,而不是用于修改 JSON 数据。如果你需要修改 JSON 数据,你可能需要将 gjson 解析的结果转换为 Go 的结构体或映射(map),进行修改后再转换回 JSON 字符串。

结论

gjson 是一个强大且灵活的库,用于在 Go 程序中快速解析和查询 JSON 数据。它的简洁 API 和高效的性能使其成为处理 JSON 数据的理想选择,特别是当处理的数据结构未知或动态时。

相关文章:

go使用gjson操作json数据

gjson使用 gjson介绍安装gjson库解析 JSON 字符串路径语法复杂查询遍历和修改结论 gjson介绍 gjson 是一个 Go 语言库,用于快速解析 JSON 数据。它提供了非常简洁的 API 来查询 JSON 数据,无需预先定义 Go 结构体或映射(map)来匹…...

Mac 下华为鸿蒙 :DevEco Studio 开发工具下载

1.登录:华为开发者中心--开发--下载工具DevEco Studio 2.下载完成后 ,安装,并创建一个新项目。 3.Tools --点击SDK Manager 下载SDK: 如果报:淘宝镜像源错误: npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_H…...

C进阶—动态内存管理

这里写目录标题 动态内存分配的原因动态内存函数mallocfreecallocrealloc C/C内存开辟柔性数组柔性数组特点 动态内存分配的原因 常见的内存开辟方式: int a 10;//在栈空间上开辟4个字节 char arr[10] {0};//在栈空间上开辟连续的10个字节上述开辟的空间问题&am…...

QT表格显示MYSQL数据库源码分析(七)

一. 连接MySQL数据库 首先,创建了一个QSqlDatabase对象,并设置数据库类型为"QMYSQL"。然后,它设置了数据库的主机名,端口号,数据库名,用户名和密码。最后,尝试打开数据库连接&#x…...

excel系列(三) - 利用 easyexcel 快速实现 excel 文件导入导出

一、介绍 在上篇文章中,我们介绍了 easypoi 工具实现 excel 文件的导入导出。 本篇我们继续深入介绍另一款更优秀的 excel 工具库:easyexcel 。 二、easyexcel easyexcel 是阿里巴巴开源的一款 excel 解析工具,底层逻辑也是基于 apache p…...

探索前后端数据传输模式:Java、Go与Python的实践20240719

深入解析前后端数据传输:Java、Go与Python的实践 引言 在当今的互联网时代,用户对Web应用的性能和交互体验有着越来越高的要求。无论是信息展示型网站还是复杂的企业应用,前后端数据传输的效率和模式选择都至关重要。本文将深入探讨三种主流…...

【YashanDB知识库】yac修改参数后关闭数据库hang住

【标题】yac修改参数后关闭数据库hang住 【问题分类】性能优化 【关键词】YashanDB, yac, shutdown hang 【问题描述】修改yac参数后执行shutdown immediate,数据库hang住。 【问题原因分析】 Shutdown操作时,线程在获取gInstance->trigger->s…...

提升网站性能:ThinkPHP6中如何实现Mysql分页查询

随着互联网的快速发展,web应用程序的开发也越来越复杂。而分页查询是web应用程序中常见的功能之一。thinkphp6是一个web框架,可以帮助开发人员快速开发应用程序。在本文中,我们将讨论如何在thinkphp6中使用mysql进行分页查询。 首先&#xf…...

Python:Flask自定义URL路由参数过滤器

目录 简单的例子手动类型转换自动类型转换自定义路由过滤器 简单的例子 先看一个简单的例子&#xff0c;GET请求需要传递一个参数&#xff0c;我们直接获取的是字符串 from flask import Flaskapp Flask(__name__)app.get("/<value>") def index(value):ret…...

闭包与装饰器

一.闭包&#xff1a; 闭包是Python中的一种高级特性&#xff0c;指的是在函数内部定义了另外一个函数&#xff0c;并返回了这个内部函数作为函数对象&#xff0c;同时还保存了外层函数的状态信息。这个内部函数可以依赖外层函数的变量和参数&#xff0c;而且外层函数返回的是这…...

DNS服务器的搭建

1、DNS服务器端软件 DNS 的域名解析都是 udp/53 . 主从之间的数据传输默认使 ⽤tcp/53 DNS服务器端软件&#xff1a; Bind是⼀款开放源码的DNS服务器软件&#xff0c;Bind由美国加州⼤学Berkeley&#xff08;伯克 利&#xff09;分校开发和维护的&#xff0c;全名为Berkele…...

【JavaScript】点击穿透

点击穿透是指在某些场景下&#xff0c;⽤户在快速点击⻚⾯元素时&#xff0c;由于某些原因&#xff08;例如⽹络延迟&#xff09;&#xff0c; 在前⼀个元素上的点击事件还没有完成时&#xff0c;下⼀个元素的点击事件就已经触发了&#xff0c;导致⽤户感 觉到⻚⾯点击⽆效或者…...

[Linux]Mysql之主从同步

AB复制 一、主从复制概述 主从复制&#xff0c;是用来建立一个和主数据库完全一样的数据库环境&#xff0c;称为从数据库&#xff1b;主数据库一般是准实时的业务数据库。 主从复制的作用 1.做数据的热备&#xff0c;作为后备数据库&#xff0c;主数据库服务器故障后&#xf…...

DAY21-二叉树

LeetCode538.把二叉搜索树转换为累加树 public TreeNode convertBST(TreeNode root) {reverseIn(root);return root;}public Integer value0,flag0;public void reverseIn(TreeNode root) {if(rootnull) return ;reverseIn(root.right);if(flag0) {valueroot.val;flag1;}else {…...

java面试-场景题

一、集合 1. java中如何给一个超大的一个亿左右的list数据去重&#xff1f; 我当时的回答是使用HashSet或Stream流的distinct语法。但是面试官好像更注重内存的消耗问题。 使用HashSet&#xff1a; HashSet 是一个不允许有重复元素的集合。你可以将List中的元素添加到HashSe…...

【TORCH】matplotlib绘制一条横线的两种方法

在创建图形和数据可视化时&#xff0c;你提到的两种方法都用于绘制特定的线条&#xff0c;但它们在实现方式上有所不同。我将逐一解释这两种方法的具体含义和用途。 1. 使用列表创建常数值的线条 y [1] * len(x)这行代码生成了一个列表 y&#xff0c;其长度与 x 相同&#x…...

深入浅出mediasoup—WebRtcTransport

mediasoup 提供了多种 transport&#xff0c;包括 WebRtcTransport、PipeTransport、DirectTransport、PlainTransport 等&#xff0c;用来实现不同目的和场景的媒体通信。WebRtcTransport 是 mediasoup 实现与 WebRTC 客户端进行媒体通信的对象&#xff0c;是 mediasoup 最重要…...

如何让局域网中的其他电脑访问VMWare虚拟机上的Windows虚拟系统

场景描述 事情是这样的&#xff0c;我在我的主机&#xff08;Win10&#xff09;上搭建了一个VMWare虚拟机&#xff0c;并安装了Windows Server的虚拟系统&#xff0c;想用它来测试一些东西。但是呢&#xff0c;我发现尽管我的主机可以愉快地跟这个服务器对话&#xff0c;可办公…...

旧电脑回收前怎么清除数据

随着技术的快速更新换代&#xff0c;很多人的电脑也会不断的更新升级&#xff0c;比如给电脑升级硬件或是更换新电脑&#xff0c;从而获得更好的性能和体验。那么旧的电脑及电脑部件怎么处理更安全呢&#xff1f;我们要确保旧电脑上的个人数据被彻底清除干净&#xff0c;这样可…...

python——TinyDB

TinyDB 是一个轻量级的纯 Python 写入的文档数据库。它不需要单独的服务器进程或复杂的配置&#xff0c;只需导入模块即可开始使用。TinyDB 适合于小型项目或测试用例&#xff0c;它的数据存储在本地文件中。 TinyDB 的基本 API 和使用方式&#xff1a; 初始化数据库 from tin…...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...