带有可选布尔值的YAML未命名字符串列表 [英] YAML List of Unnamed Strings With Optional Boolean

查看:57
本文介绍了带有可选布尔值的YAML未命名字符串列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想定义默认情况下定义字符串列表的YAML.我不希望此字符串列表成为命名属性.我也想有一个可选的布尔参数.如

I want to define YAML that defines a list of strings by default. I don't want this list of strings to be a named attribute. I also want to have an optional boolean parameter. As in

package main

import (
    "fmt"
    "log"

    yaml "gopkg.in/yaml.v2"
)

type ThingAndGroups struct {
    Groups   []string
    boolval  boolean
}

var someStr = `
thing1:
  - g1
  - g2
  boolval:
    y

thing2:
  - g1
  - g2
`

func main() {
    t := make(map[string]ThingAndGroups)

    err := yaml.Unmarshal([]byte(someStr), &t)
    if err != nil {
        log.Fatalf("error: %v", err)
    }
    fmt.Printf("--- t:\n%v\n\n", t)
}

然后会返回

map [thing1:{[g1,g2] true},thing2:{[g1,g2] false}]

map[thing1:{[g1, g2] true}, thing2:{[g1, g2] false}]

有可能吗?

我不想将YAML定义为

I DO NOT want to define the YAML as

var someStr = `
thing1:
  groups:
    - g1
    - g2
  boolval:
    y`

如果YAML没有boolval,我可以做

And if the YAML didn't have boolval I could just do

 func main() {
    // NOTE THIS IS A MAP
    t := make(map[string][]string)

    err := yaml.Unmarshal([]byte(someStr), &t)
    if err != nil {
        log.Fatalf("error: %v", err)
    }
    fmt.Printf("--- t:\n%v\n\n", t)
}

推荐答案

问题

  • 不使用映射键来定义YAML序列.
    • 将之前"更改为之后"
      var someStr = `
      thing1:
        - g1
        - g2
        boolval:
          y
    
      thing2:
        - g1
        - g2
      `
    

    之后

      var someStr = `
      thing1:
        - g1
        - g2
        - boolval: y
    
      thing2:
        - g1
        - g2
      `
    

    陷阱

    • 这种方法不理想,因为它使用YAML序列存储两种不同类型的数据(组和布尔值).
    • 另一个答案(后来被删除)建议使用组键,这是一个很好的建议.
    • 这篇关于带有可选布尔值的YAML未命名字符串列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆