我看过一些帖子,比如 这个 解决了在不同键上取消标记的问题。然而,当我有多个图层时,我似乎很难理解如何做到这一点。
这是我想取消标记的内容。
{"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上的解决方案似乎是倾向于单层的解映射。
我的一些假设和建议。
你可以为结构使用一个自定义的unmarshal,像下面这样。
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
}
下面是一个工作示例 去游乐场.