go json处理 encoding/json 查询和修改gjson/sjson

ops/2025/2/24 19:59:49/

推荐

标准库encoding/json

import ("encoding/json""log"
)// Student1 注意点:
// 1. 注意alain别名的写法: `json:"name1"` 而非 "json:name1"
// 2. 注意json.Marshal的时候只输出首字母大写的属性
// 3. `json:"-"` 标识这个属性忽略,不输出  用约定替代语法
type Student1 struct {Name string `json:"name1"`Age  string `json:"-"`sex  string `json:"sex1"`
}func main() {log.Println("main ...")// 将对象转换为jsons := Student1{"111", "222", "333"}data, err := json.Marshal(s)if err != nil {log.Fatalln("json marshall error", err.Error())}// {"name1":"111"}log.Println("student json :", string(data))// 将map转为jsonm := make(map[string]interface{})m["name"] = "111"m["age"] = "22"data, err = json.Marshal(m)if err != nil {log.Fatalln("json marshall error", err.Error())}log.Println("map json :", string(data))// 将json数据转为Studentjson1 := "{\"name1\":\"111\"}"var s1 Student1json.Unmarshal([]byte(json1), &s1)log.Println("student object:", s1)log.Println("success ...")
}

快速查询和修改gjson/sjson

类似java中JsonPath,可以根据路径来修改json

import ("log""github.com/tidwall/gjson""github.com/tidwall/sjson"
)func main() {log.Println("main ...")json1 := `{"name":{"first":"www.topgoer.com","last":"dj"},"age":18}`// 获取某个属性,返回Result对象lastName := gjson.Get(json1, "name.last")log.Println("name.last:", lastName)log.Println("name.last:", lastName.String())// 获取到对象name := gjson.Get(json1, "name")// {"first":"www.topgoer.com","last":"dj"}log.Println("name:", name)log.Println("name:", name.Get("last"))// 修饰符 @pretty 打印: {//  "first": "www.topgoer.com",//  "last": "dj"//}name = gjson.Get(json1, "name|@pretty")log.Println("pretty name:", name)// 一次获取多个many := gjson.GetMany(json1, "name", "age")for i := 0; i < len(many); i++ {log.Println("many", i, many[i])}// 设置值  {"name":{"first":"www.topgoer.com","last":"dj"},"age":30}newJson, _ := sjson.Set(json1, "age", 30)log.Println("newJson:", newJson)log.Println("success ...")// 校验json格式if gjson.Valid(json1) {log.Println("is json ", gjson.Valid(json1))}// 遍历属性 {"first":"www.topgoer.com","last":"dj"}//2025/02/13 16:39:32 name > first : www.topgoer.com//2025/02/13 16:39:32 name > last : djname.ForEach(func(key, value gjson.Result) bool {log.Println("name >", key, ":", value.String())return true})// 多行json数据的变量json1 = `{"name": "Gilbert", "age": 61}{"name": "Alexa", "age": 34}{"name": "May", "age": 57}{"name": "Deloise", "age": 44}`gjson.ForEachLine(json1, func(line gjson.Result) bool {log.Println(line.String())return true})}


http://www.ppmy.cn/ops/161038.html

相关文章

机器视觉--Halcon的数据结构(数组)

引言 在机器视觉领域&#xff0c;Halcon 作为一款功能强大且广泛应用的软件&#xff0c;其丰富的数据结构为开发者提供了高效处理各种视觉任务的能力。数组作为其中一种基础且重要的数据结构&#xff0c;在 Halcon 中扮演着不可或缺的角色。它能够有序地存储多个相同类型的数据…

鸿蒙NEXT应用App测试-通用测试

注意&#xff1a;大家记得学完通用测试记得再学鸿蒙专项测试 https://blog.csdn.net/weixin_51166786/article/details/145768653 注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章…

体验用ai做了个python小游戏

体验用ai做了个python小游戏 写在前面使用的工具2.增加功能1.要求增加视频作为背景。2.我让增加了一个欢迎页面。3.我发现中文显示有问题。4.我提出了背景修改意见&#xff0c;欢迎页面和结束页面背景是视频&#xff0c;游戏页面背景是静态图片。5.提出增加更多游戏元素。 总结…

安全面试3

文章目录 一个单位的一级域名可能不止一个&#xff0c;怎么收集某个单位的所有域名&#xff0c;注意不是子域名用转义字符防御时&#xff0c;如果遇到数据库的列名或是表名本身就带着特殊字符&#xff0c;应该怎么做宽字节注入原理防御宽字节注入的方法 基于黑白名单的修复&…

C++ 设计模式-访问者模式

C++访问者模式 一、模式痛点:当if-else成为维护噩梦 开发动物园管理系统,最初的需求很简单: class Animal {}; class Cat : public Animal {}; class Dog : public Animal {};// 处理动物叫声 void makeSound(Animal* a) {if (auto c = dynamic_cast<Cat*>(a)) {st…

火语言RPA--Excel插入空列

【组件功能】&#xff1a;在Excel内指定的位置插入空列 配置预览 配置说明 在第n列之前 支持T或# 填写插入添加插入第n列之前列名&#xff0c;列名从A开始&#xff0c;依次递增。 插入n列 支持T或# 插入多少列。 Sheet页名称 支持T或# Excel表格工作簿名称。 示例 Exc…

现场可以通过手机或者pad实时拍照上传到大屏幕的照片墙现场大屏电子照片墙功能

现场可以通过手机或者pad实时拍照上传到大屏幕的照片墙现场大屏电子照片墙功能&#xff0c;每个人都可以通过手机实时拍照上传到大屏幕上,同时还可以发布留言内容&#xff0c;屏幕上会同步滚动播放展示所有人的照片和留言。相比校传统的照片直播功能更加灵活方便&#xff0c;而…

javascript闭包在实际项目中有哪些应用场景?请举例说明。

javascript闭包在实际项目中有哪些应用场景&#xff1f;请举例说明。 闭包在 JavaScript 里就像是一个神奇的“小口袋”&#xff0c;它能让函数记住并访问其外部函数的变量&#xff0c;哪怕外部函数已经执行完了。下面用大白话详细介绍闭包在实际项目中的应用场景&#xff0c;…