Golang Json/map 合并/update

您所在的位置:网站首页 盲杖有哪些功能和特点 Golang Json/map 合并/update

Golang Json/map 合并/update

2024-07-02 12:37:51| 来源: 网络整理| 查看: 265

Golang Json/map 合并/update

Nov 25TH, 2017 • Permalink

把两个map 合并,功能与 python 的 update 功能相同

Go: map update 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 package main import ( "encoding/json" "fmt" "reflect" ) var jsonMergeDepth = 32 func main() { buf1 := []byte(`{"a":1,"b":2}`) buf2 := []byte(`{"c":3,"d":4,"a":"aaa"}`) var m1, m2 map[string]interface{} json.Unmarshal(buf1, &m1) json.Unmarshal(buf2, &m2) merged := JsonMerge(m1, m2) fmt.Println(merged) } func JsonMerge(dst, src map[string]interface{}) map[string]interface{} { return jsMerge(dst, src, 0) } func jsMerge(dst, src map[string]interface{}, depth int) map[string]interface{} { if depth > jsonMergeDepth { return dst // panic("too deep!") } for key, srcVal := range src { if dstVal, ok := dst[key]; ok { srcMap, srcMapOk := jsMapify(srcVal) dstMap, dstMapOk := jsMapify(dstVal) if srcMapOk && dstMapOk { srcVal = jsMerge(dstMap, srcMap, depth+1) } } dst[key] = srcVal } return dst } func jsMapify(i interface{}) (map[string]interface{}, bool) { value := reflect.ValueOf(i) if value.Kind() == reflect.Map { m := map[string]interface{}{} for _, k := range value.MapKeys() { m[k.String()] = value.MapIndex(k).Interface() } return m, true } return map[string]interface{}{}, false }

注意

若有重复的key,会把原来key 值覆盖,上面代码输出:

plaintext: output 1 map[a:aaa b:2 c:3 d:4]

参考 https://github.com/peterbourgon/mergemap

本文网址: https://golangnote.com/topic/209.html 转摘请注明来源

Posted by GolangNote Category: Golang笔记 Tags: update Json Golang map 合并 Comment(0) | PageView(12992)

Nearby articles Newer › golang 编译使用go build 还是go install? Older › 用flickr api go sdk 简单上传图片的例子 Related articles Golang slice 和 map 的查询性能比较

下面是 Golang slice 和 map 的查询性能比较代码...

Golang 合并byte 的性能比较

Golang 合并 byte 的性能比较,选择比较快的方式合并 `byte`...

Golang 用标准库把图片做成gif动画

Golang 用标准库把图片做成gif 动画...

Golang 实现根据字符串生成固定颜色

根据字符串生成固定颜色,效果如下...

golang 获取程序本身的md5值

获取golang 编译好的包本身的md5值,在验证开源的程序有没有被修改时很有用。...

谷歌翻译的 golang 库推荐

Google 的翻译越来越好了,官方的Golang SDK 已经很完美,这里介绍的是几个非官方发布的有特色的库。...

golang共享数据用Mutex 或 Channel

在go 里,多线程对共享数据的操作一般要使用Mutex 或 Channel 来加锁或隔离通信。下面是一个使用Mutex 和 Channel 比较的例子。...

Golang 使用 wkhtmltopdf 把HTML转为PDF文件

把 HTML 内容转为 PDF 文件,这里用到一个 Golang 库 `go-wkhtmltopdf`,它是对 `wkhtmltopdf` 的 Golang 命令行封装,可以方便的调用。...

Golang Web 程序生产环境独立部署示例

一个 web 应用通常是跑在一个前端代理,如 Nginx 后,这样可以方便的在同一个服务器部署多个应用。这里说的独立部署是指让 go web 程序直接暴露在外面,独占 443、80 端口(俗称裸跑)。这样做除了性能有些提高外,更重要的是部署方便。...

Golang 用snappy + Base64 简单压缩加密进行网络传输

snappy 是较省 CPU 的压缩算法,速度快,可以用于简单数据压缩,结合 Base64 进行网络传输。...



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭