gpt4 book ai didi

json - golang中结构到复杂的JSON解析

转载 作者:IT王子 更新时间:2023-10-29 01:38:23 25 4
gpt4 key购买 nike

我有一个有效的 JSON,我不知道如何在 json.Unmarshal (golang) 中解析它:

{
"method": "notice",
"params": [0, [{
"previous": "12345",
"timestamp": "2017-12-12T05:49:09",
"witness": "12345",
"transaction_merkle_root": "ffff",
"extensions": [],
"witness_signature": "12345"
}]]
}

我能做的就是:

type MyJSON struct {
Method string `json:"method"`
Params []interface{} `json:"params"`
}

如果有人帮助我编写正确的 MyJSON 类型以通过 golang 的 json.Unmarshal 解析所有其他字段,我将非常感激。这对我来说太复杂了:(

最佳答案

我假设 params 取决于 method。如果是这样,首先将顶层解码为具有方法名称和 json.RawMessage 的结构。将参数收集为 JSON 文本。

var call struct {
Method string
Params json.RawMessage
}
if err := json.Unmarshal(data, &call); err != nil {
log.Fatal(err)
}

为每个参数声明变量。此代码将取决于方法。

    var param0 int
var param1 []struct {
Previous string
Timestamp string
Witness string
Transaction_merkle_root string
Extensions []interface{}
Witness_signature string
}

使用指向这些变量的指针创建参数列表。

    params := []interface{}{&param0, &param1}

现在将 JSON 解码为参数。这将设置变量 param0 和 param1:

    if err := json.Unmarshal(call.Params, &params); err != nil {
log.Fatal(err)
}

重复其他方法。

Here's the runnable code on the playground .

如果您只需要处理“通知”方法,这可以简化。在这种情况下,您可以直接解码为参数而无需 RawMessage 步骤。

var param0 int
var param1 []struct {
Previous string
Timestamp string
Witness string
Transaction_merkle_root string
Extensions []interface{}
Witness_signature string
}
call := struct {
Method string
Params []interface{}
}{
Params: []interface{}{&param0, &param1},
}

if err := json.Unmarshal(data, &call); err != nil {
log.Fatal(err)
}

Here's runnable code for the simple case .

关于json - golang中结构到复杂的JSON解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47767300/

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