我看过一些帖子,例如 this one解决了在不同键上解码的问题。但是,当我有多个图层时,我似乎很难弄清楚如何去做。
这是我想解码的内容:{"chainlink":{"usd":3.75}}
然而,chainlink
和 usd
可能会有所不同。
我目前的方法如下所示:
type cryptoCurrency struct {
Currency cryptoCurrencyResult `json: "chainlink,JPY,gold,apple"`
}
type cryptoCurrencyResult struct {
Usd float64 `json: "usd,USDT,peso"`
}
(以上显然是错误的)
然后使用它们:
var crypto cryptoCurrency
json.Unmarshal(data, &crypto)
但同样,数据可能看起来像:
{"chainlink":{"usd":3.75}}
{"JPY":{"USDT":1000}}
{"gold":{"peso":100}}
{"apple":{"usd":1.35}}
目前关于 SO 的解决方案似乎是单级解码。
最佳答案
我的一些假设/建议:
您可以为结构使用自定义解码,如下所示:
type cryptoCurrency struct {
Type string
PriceInUSD float64
}
func (c *cryptoCurrency) UnmarshalJSON(data []byte) error {
var tmp map[string]map[string]float64
json.Unmarshal(data, &tmp)
for k, v := range tmp {
c.Type = k
switch {
case v["usd"] != 0.0:
c.PriceInUSD = v["usd"]
case v["USDT"] != 0.0:
// Convert into USD... same for peso
}
}
return nil
}
这是 go playground 中的工作示例.
关于go - 具有更改键值的多级 Unmarshall JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61784329/