V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
SSang
V2EX  ›  Go 编程语言

Golang 如何转换 map key 是 struct 的 json

  •  
  •   SSang · 2021-03-19 17:35:50 +08:00 · 1194 次点击
    这是一个创建于 1135 天前的主题,其中的信息可能已经有所发展或是发生改变。
    {
    	"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
    
    mogg
        1
    mogg  
       2021-03-19 17:55:19 +08:00
    json 的 key 只有 string 一个类型……
    SSang
        2
    SSang  
    OP
       2021-03-19 18:00:52 +08:00
    @mogg 是的,严格来说这已经不是 json 了,但是我目前从 服务端拉下来的数据就张这个样子,我想看看有没有什么库能直接用的,不然我就得自己写解析了
    SSang
        3
    SSang  
    OP
       2021-03-19 18:13:30 +08:00
    在 Java 里好像有个叫做 `JSON.parseObject(String jstr, Class<T> clazz)` 的东西,但是我没看懂
    hallDrawnel
        4
    hallDrawnel  
       2021-03-19 21:36:39 +08:00
    能看到服务器的代码吗?好奇怎么拼出来的,这样真的符合 JSON 的标准吗?
    willJE
        5
    willJE  
       2021-03-19 23:12:00 +08:00
    同意楼上,你这个也不是 json 啊
    SSang
        6
    SSang  
    OP
       2021-03-24 09:30:24 +08:00
    这个是用 java 的 fastjson 做的


    @hallDrawnel
    @willJE
    SSang
        7
    SSang  
    OP
       2021-03-24 09:31:16 +08:00
    不让上链接,可以直接去 github 上搜 alibaba/fastjson
    SSang
        8
    SSang  
    OP
       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
        9
    SSang  
    OP
       2021-03-24 09:35:07 +08:00
    这肯定是不符合 JSON 标准的,但阿里的东西向来就是这样
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2977 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:54 · PVG 20:54 · LAX 05:54 · JFK 08:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.