【问题标题】:How to group multiple yaml fields into one [duplicate]如何将多个yaml字段分组为一个[重复]
【发布时间】:2020-03-05 08:23:23
【问题描述】:

这是我拥有的数据:

[alpha:0.1, beta:0.2] //1
[alpha:0.3, beta:0.4] //2

我正在为数据设计 YAML。

注意

  1. alphabeta 可以更改。
  2. [alpha:0.1, beta:0.2] 的长度可以增加和减少。我想将alphabeta 组合在一起。

我已经阅读了一些基本教程,但我不知道如何将alphabeta 组合在一起。

这是我的尝试:

params: 
  - 
    paramKey: alpha
    paramVal: 0.1
  - 
    paramKey: beta
    paramVal: 0.2
  - 
    paramKey: alpha
    paramVal: 0.3
  - 
    paramKey: beta
    paramVal: 0.4

更新:

我使用了以下内容:

params: 
  - alpha: 0.1
    beta: 0.2
  - alpha: 0.3
    beta: 0.4

代码:

func main() {
    f, err := os.OpenFile("", os.O_RDWR|os.O_CREATE, 0666)
    if err != nil {
        log.Panic(err)
    }

    fByte, err := ioutil.ReadAll(f)
    if err != nil {
        log.Panic(err)
    }

    var m params
    err = yaml.Unmarshal(fByte, &m)
    if err != nil {
        log.Fatalf("error: %v", err)
    }
    fmt.Printf("%v \n", m)
}

type params struct {
    params []map[string]float32 `yaml:"params"`
}

输出是{[]}

【问题讨论】:

  • 你需要使用 yaml 而不是 json。请参阅下面的其他答案。
  • 我的错。我已经改变了,但输出是{[]}
  • 只需使用没有params: 的 yaml 和凹痕。请参阅下面的固定答案。
  • 导出您的字段!

标签: go yaml


【解决方案1】:
- alpha: 0.1
  beta: 0.2
- alpha: 0.3
  beta: 0.4

这里有一些(经过测试的)Go 代码可以解组为一片地图:

    var params []map[string]float64

    s := `---
- alpha: 0.1
  beta: 0.2
- alpha: 0.3
  beta: 0.4
`
    if err := yaml.NewDecoder(strings.NewReader(s)).Decode(&params); err != nil {
        log.Fatalln("Error decoding YAML:", err.Error())
    }

    fmt.Println(params)

【讨论】:

  • alphabeta 可以更改为我在问题中提到的任何其他内容。
  • 是的,我试过[]map[string]float64,但我得到了line 1: cannot unmarshal !!map into []map[string]float64
  • 抱歉@John Hass,我并没有真正理解您所说的可以更改它们的意思。我已经相应地调整了答案。从 yaml 中删除参数:
  • 他们可能是 [gamma: 0.5, omega: 0.6]。有意义吗?
  • 未删除和赞成。
猜你喜欢
  • 1970-01-01
  • 2016-07-25
  • 2020-08-21
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多