处理动态 JSON 模式解码
Handling dynamic JSON schema decoding
我有一个 sends/parses JSON-RPC
请求的 Go HTTP 客户端。
HTTP POST 请求:
[
{"id":"1", "method":"action1","params":[]},
{"id":"2", "method":"action2","params":[]},
...
{"id":"X", "method":"actionX","params":[]}
]
HTTP 响应:
[
{"id":"1", "error":null, "result":{...}},
{"id":"2", "error":null, "result":{...}},
...
{"id":"X", "error":null, "result":{...}}
]
如何处理那些 result
键是具有动态模式的对象的有效负载,具体取决于键 id
的值。
您可以通过将结果解组为 json.RawMessage
来指示 json 库不要解组结果字段,在这种情况下,将响应解组为一片:
type result struct{
ID string `json:"id"`
Err *string `json:"error"` // maybe a string?
Result json.RawMessage `json:"result"`
}
然后当您知道您正在处理的是哪个 ID 时,您可以将 result.ID
解组到另一个具有您期望的结构的结构中。
我有一个 sends/parses JSON-RPC
请求的 Go HTTP 客户端。
HTTP POST 请求:
[
{"id":"1", "method":"action1","params":[]},
{"id":"2", "method":"action2","params":[]},
...
{"id":"X", "method":"actionX","params":[]}
]
HTTP 响应:
[
{"id":"1", "error":null, "result":{...}},
{"id":"2", "error":null, "result":{...}},
...
{"id":"X", "error":null, "result":{...}}
]
如何处理那些 result
键是具有动态模式的对象的有效负载,具体取决于键 id
的值。
您可以通过将结果解组为 json.RawMessage
来指示 json 库不要解组结果字段,在这种情况下,将响应解组为一片:
type result struct{
ID string `json:"id"`
Err *string `json:"error"` // maybe a string?
Result json.RawMessage `json:"result"`
}
然后当您知道您正在处理的是哪个 ID 时,您可以将 result.ID
解组到另一个具有您期望的结构的结构中。