Golang 如何转换 map key 是 struct 的 json

2021-03-19 17:35:50 +08:00
 SSang
{
	"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
1212 次点击
所在节点    Go 编程语言
9 条回复
mogg
2021-03-19 17:55:19 +08:00
json 的 key 只有 string 一个类型……
SSang
2021-03-19 18:00:52 +08:00
@mogg 是的,严格来说这已经不是 json 了,但是我目前从 服务端拉下来的数据就张这个样子,我想看看有没有什么库能直接用的,不然我就得自己写解析了
SSang
2021-03-19 18:13:30 +08:00
在 Java 里好像有个叫做 `JSON.parseObject(String jstr, Class<T> clazz)` 的东西,但是我没看懂
hallDrawnel
2021-03-19 21:36:39 +08:00
能看到服务器的代码吗?好奇怎么拼出来的,这样真的符合 JSON 的标准吗?
willJE
2021-03-19 23:12:00 +08:00
同意楼上,你这个也不是 json 啊
SSang
2021-03-24 09:30:24 +08:00
这个是用 java 的 fastjson 做的


@hallDrawnel
@willJE
SSang
2021-03-24 09:31:16 +08:00
不让上链接,可以直接去 github 上搜 alibaba/fastjson
SSang
2021-03-24 09:32:41 +08:00
服务端是也是 阿里的 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
SSang
2021-03-24 09:35:07 +08:00
这肯定是不符合 JSON 标准的,但阿里的东西向来就是这样

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/763268

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX