gpt4 book ai didi

去 un/marshal 结构为 json

转载 作者:行者123 更新时间:2023-12-01 22:13:51 24 4
gpt4 key购买 nike

我需要将 json rpc 消息包装在 go 结构中
这是我的第一个想法,它适用于这样的传出消息

// Message wrapper
type Message struct {
ID *string `json:"id,omitempty"`
JSONRPC string `json:"jsonrpc"`
Method *string `json:"method,omitempty"`
Params *interface{} `json:"params,omitempty"`
Result *interface{} `json:"result,omitempty"`
}

// NewNotification creates a RPC Notification
func NewNotification(method string, params interface{}) Message {

m := Message{}
m.JSONRPC = "2.0"
m.Method = &method
m.Params = &params

return m

}

type Test struct {
A string `json:"a"`
B string `json:"b"`
}

t := Test{"abc", "def"}

m := NewNotification("testMethod", t)

socket.WriteJSON(m)

但是现在对于接收方向,我遇到了问题 Params *interface{}宣言。

我确定 Params有效载荷类型通过 Method领域并想要
解码 Params到那个结构......但因此我需要类型 json.RawMessage对于 Params让这个工作。

我不想定义 MessageInMessageOut结构!
m := Message{}
socket.ReadJSON(m)

t := Test{}

json.Unmarshal(m.Params, &t)

最佳答案

您应该使用 json.RawMessage作为您的参数和结果字段的类型。这将延迟这些字段的解码,直到您知道接收端的方法是什么。查看文档和示例:这是相同的用例:https://golang.org/pkg/encoding/json/#RawMessage

关于去 un/marshal 结构为 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61932686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com