Golang Go语言中如何转换map key是struct的json
Golang Go语言中如何转换map key是struct的json
{
“map”: {
{
“name”: “js”,
“age”: 18
}: {
“id”: 10,
“port”: 1234
}
}
}
转换成
type ST2 struct {
Id int `json:"id"`
Port int `json:"port"`
}
type ST1 struct {
Name string json:"name"
Age int json:"age"
}
type ST struct {
Map map[ST1]ST2 json:"map"
}
网上找了一堆,都是 map[string]struct
的转换,到这种 map[struct]struct
就不行了
报错信息是
invalid character '{' looking for beginning of object key string
更多关于Golang Go语言中如何转换map key是struct的json的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
json 的 key 只有 string 一个类型……
更多关于Golang Go语言中如何转换map key是struct的json的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
是的,严格来说这已经不是 json 了,但是我目前从 服务端拉下来的数据就张这个样子,我想看看有没有什么库能直接用的,不然我就得自己写解析了
在 Java 里好像有个叫做 JSON.parseObject(String jstr, Class<T> clazz)
的东西,但是我没看懂
同意楼上,你这个也不是 json 啊
这个是用 java 的 fastjson 做的
不让上链接,可以直接去 github 上搜 alibaba/fastjson
服务端是也是 阿里的 rocketmq
服务端 encode 代码:
/broker/src/main/java/org/apache/rocketmq/broker/processor/AdminBrokerProcessor.java#L920
java 的客户端解析代码
/client/src/main/java/org/apache/rocketmq/client/impl/MQClientAPIImpl.java#L1213
这肯定是不符合 JSON 标准的,但阿里的东西向来就是这样
在Go语言中,如果你有一个map,其key是结构体类型,并且你需要将这个map转换为JSON格式,直接序列化会遇到问题,因为JSON的key必须是字符串类型。
要解决这个问题,你可以采取以下几种策略:
-
将结构体key转换为字符串: 你可以定义一个辅助函数,将结构体转换为唯一的字符串表示(例如,通过JSON序列化结构体作为字符串)。然后,使用这个字符串作为新的map的key,将原始map的值存储在新的map中。
-
自定义序列化逻辑: 实现自定义的序列化逻辑,遍历原始map,将结构体key转换为字符串,并手动构建JSON对象。
-
使用第三方库: 有些第三方库可能提供了更简便的方法来处理这种情况,比如通过标签或自定义序列化逻辑来辅助处理。
示例代码(将结构体key JSON序列化作为字符串key):
import (
"encoding/json"
"fmt"
)
type Key struct {
A int
B string
}
func main() {
originalMap := make(map[Key]string)
key := Key{A: 1, B: "example"}
originalMap[key] = "value"
newMap := make(map[string]string)
for k, v := range originalMap {
keyStr, _ := json.Marshal(k)
newMap[string(keyStr)] = v
}
jsonData, _ := json.Marshal(newMap)
fmt.Println(string(jsonData))
}
这段代码展示了如何将结构体key的map转换为字符串key的map,并序列化为JSON。