xSky 实验室关注高性能计算,分布式系统/存储,大数据/机器学习/WebRTC
目录
  • 首页
  • 技术相关
  • 原创作品
  • 人工智能/机器学习
  • 系统与架构
  • 数据库/数据分析
  • 分布式系统/存储
  • 服务端开发
  • WEBRTC研究
  • 开发调试
  • 网络与安全
  • 常用工具
  • 杂七杂八

go语言JSON字典模拟

2022-09-16 03:18:27

 

有关 golang 里JSON 使用的用法整理

 

package main

import (
	"encoding/json"
	"fmt"
)

type JSON = map[string]interface{}

func makeJson() JSON {
	var obj = make(JSON)
	return obj
}

func stringify(obj JSON) string {
	b, err := json.Marshal(obj)
	if err != nil {
		fmt.Printf("marshal failed, err:%v\n", err)
	}
	return string(b)
}

func parse(str string) JSON {
	var obj = makeJson()
	err := json.Unmarshal([]byte(str), &obj)
	// 结果:map字典: map[count:1]
	//fmt.Printf("map字典: %v\n", obj) // 1
	if err != nil {
		fmt.Printf("unmarshal failed, err:%v\n", err)
		return obj
	}

	return obj
}

func main() {

	var obj = makeJson()
	obj["count"] = 123   // int
	obj["name"] = "test" // string

	var subobj = makeJson()
	subobj["aaa"] = 111
	subobj["bbb"] = 22.33
	subobj["ccc"] = "test"

	obj["subobj"] = subobj // int

	fmt.Printf("打印字典: %v\n", obj)

	str := stringify(obj)

	fmt.Printf("打印json: %v\n", str)

	fmt.Printf("打印 obj: %v\n", parse(str))

	newobj := parse(str)
	fmt.Printf("打印 json: %v\n", newobj["subobj"])

	sub := newobj["subobj"].(JSON)

	fmt.Printf("打印 json: %v\n", sub["aaa"])

}

 

通过 Path Syntax 解析/编辑JSON

 

GJSON 是一个 Go 包,它提供了一种从 json 文档中获取值的快速简单的方法。它具有单行检索、点符号路径、迭代和解析 json 行等功能。

还可以查看SJSON以修改 json,以及JJ命令行工具。

本自述文件是如何使用 GJSON 的快速概述,有关更多信息,请查看GJSON 语法。

GJSON 也可用于Python和Rust

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

 

SJSON 是一个 Go 包,它提供了一种非常快速和简单的方法来在 json 文档中设置值。要快速检索 json 值,请查看GJSON。

对于命令行界面,请查看JJ。

package main

import "github.com/tidwall/sjson"

const json = `{"name":{"first":"Janet","last":"Prichard"},"age":47}`

func main() {
	value, _ := sjson.Set(json, "name.last", "Anderson")
	println(value)
}

 

参考
go中对json数据的解析和封装  
Jsonvalue - Go map[string]interface{} 更快和更方便的替代品

By:xSky | 技术相关 |

  • 分类目录

    • 技术相关 (34)
    • 原创作品 (13)
    • 人工智能/机器学习 (6)
    • 系统与架构 (9)
    • 数据库/数据分析 (11)
    • 分布式系统/存储 (4)
    • 服务端开发 (7)
    • WEBRTC研究 (7)
    • 开发调试 (7)
    • 网络与安全 (9)
    • 常用工具 (9)
    • 杂七杂八 (6)
  • 最新文章

    • WSL从C盘迁移到其他盘区
    • 赵何娟:中国AI追随之路的五大误区,我们至少落后十年
    • zap  发送日志到 websocket
    • QUIC(隐藏的)超能力
    • MYSQL 生成日期/时间序列总结
    • Linux bash终端设置代理(proxy)访问
    • centos 下 yum安装python3
    • 使用SQL查询Milvus 向量数据库
    • 浅谈 MySQL 新的身份验证插件 caching_sha2_password
    • Milvus v2.2.1 开源向量搜索引擎使用教程
    • 部署了一个SRS的demo
    • Dockerfile 详解
    • Docker常用命令
    • Tus文件上传协议
    • 编译运行Milvus
    • MinIO 快速入门
    • ESP32
    • Prometheus监控报警系统搭建
    • go语言JSON字典模拟
    • go语言的sql解析器
    • Grafana配置数据源,自定义查询语法
    • TDengine + Telegraf + Grafana
    • gRPC-Gateway 返回JSON数据int64类型被转为string类型问题
    • LLAMA模型试玩
    • 语音识别的一些开源项目整理
    • 使用MYSQL8进行统计分析
    • 记录FFmpeg抽帧、合流、转码、加水印等操作
    • 移动网络弱网处理研究
    • 翻译:使用 Semgrep 进行热点代码评审
    • 共享内存并发路线图
  • 链接

    • xSky的Blog
    • 我的Github
    • 实时监控图表
    • 预印本
    • xRedis 在线文档
    • xSkyProxy
    • xChart 数据在线测试
    • 我的电子书
    • xChart 数据可视化系统
    • 树莓派技术圈
    • WebRTC开发者社区
  • 开源项目

    • xReis C++的redis客户端库
    • xBlog-C++ 博客程序
    • xSkyProxy-新型MySQL代理网关
    • 数据可视化平台- xChart
    • xhttpcache 高速数据缓存服务
    • xMonitor-图形监测工具
    • 网址收集

Powered By xBlog

Copyright 2010~2024 0xsky.com All Rights Reserved.