在Golang中,我们如何将JSON中的snake_case密钥转换为camelCase密钥?
我在golang写了一个http api.此api从数据存储区获取数据,进行一些计算并将响应作为JSON返回.
情况是数据存储区(elasticsearch)中的JSON文档与snake_case键一起出现,而API响应应该是基于camelCase的(这只是为了与项目中的其他api标准一致).插入ES的源无法修改.所以它只能在api级别进行密钥转换.
我编写了一个结构,可以很好地从数据存储区读取JSON.但是如何在golang中将密钥转换为camlelCase?
JSON可以嵌套,并且必须转换所有键.JSON是任意大的.即一些键只是映射到类型接口{}
我也使用go的echo框架来编写api.
防爆.
{
"is_modified" : true,
{ attribute":
{
"legacy_id" : 12345
}
}
}
Run Code Online (Sandbox Code Playgroud)
至
{
"isModified" : true,
{ attribute":
{
"legacyId" : 12345
}
}
}
Run Code Online (Sandbox Code Playgroud)
有关如何在golang中执行此操作的任何指示?
谢谢.
结构:
type data_in_es struct {
IsModified bool `json:"is_modified,omitempty"`
Attribute *attribute `json:"attribute,omitempty"`
}
type attribute struct {
LegacyId int `json:"legacy_id,omitempty"`
}
Run Code Online (Sandbox Code Playgroud) 我正在运行本地redis服务器.在redis中有一个坏密钥占用了大量内存.在删除该键之前,"info memory"显示5.3GB作为占用内存.那个坏密钥占用了大约800MB的数据.这基于"调试对象"输出.
删除该密钥后,内存几乎翻了一倍.预计只有800MB左右.
关于这背后是什么的任何想法?在ubuntu上运行.
127.0.0.1:6379[3]> info
# Server
redis_version:2.8.9
127.0.0.1:6379[3]> info memory
# Memory
used_memory:5746884728
used_memory_human:5.35G
used_memory_rss:6382206976
used_memory_peak:8865352096
used_memory_peak_human:8.26G
used_memory_lua:37888
mem_fragmentation_ratio:1.11
mem_allocator:jemalloc-3.2.0
127.0.0.1:6379[3]> debug object c43d3e42-7e63-47f3-bb63-b58a897c29a6
Value at:0x7f77a1db1d10 refcount:1 encoding:linkedlist
serializedlength:814237852 lru:994050 lru_seconds_idle:99559
(5.53s)
127.0.0.1:6379[3]> del c43d3e42-7e63-47f3-bb63-b58a897c29a6
(integer) 1
(1.78s)
127.0.0.1:6379[3]> info memory
# Memory
used_memory:4145366968
used_memory_human:3.86G
used_memory_rss:4375691264
used_memory_peak:8865352096
used_memory_peak_human:8.26G
used_memory_lua:37888
mem_fragmentation_ratio:1.06
mem_allocator:jemalloc-3.2.0
Run Code Online (Sandbox Code Playgroud)
谢谢.