我有以下程序,其中我需要使用以下结构来解析yaml:
https://codebeautify.org/yaml-
validator/cbabd352
这是
有效的Yaml ,我使用字节使其更简单,也许缩进在复制粘贴到问题的过程中已更改,但您可以在链接中看到yaml有效
YAML的有API_VERSION和亚军,每个转轮(关键是名字),我已经命令的列表,我需要打印这些命令function1
和function4
,我究竟错在这里做什么?
package main
import (
"fmt"
"log"
"gopkg.in/yaml.v2"
)
var runContent = []byte(`
api_ver: 1
runners:
- name: function1
type:
- command: spawn child process
- command: build
- command: gulp
- name: function2
type:
- command: run function 1
- name: function3
type:
- command: ruby build
- name: function4
type:
- command: go build
`)
type Result struct {
Version string `yaml:"api_ver"`
Runners []Runners `yaml:"runners"`
}
type Runners struct {
Name string `yaml:"name"`
Type []Command `yaml:"type"`
}
type Command struct {
Command string `yaml:"command"`
}
func main() {
var runners []Result
err := yaml.Unmarshal(runContent, &runners)
if err != nil {
log.Fatalf("Error : %v", err)
}
fmt.Printf("%+v", runners[0])
}
我得到的错误 cannot unmarshal !!map into []main.Result
我无法更改Yaml,应该完全像这样
https://codebeautify.org/yaml-
validator/cbabd352
这是代码
https://play.golang.org/p/zidjOA6-gc7
您提供的Yaml令牌中包含错误。在此处验证代码中使用的Yaml https://codebeautify.org/yaml-
validator/cbaabb32
之后,创建结构类型的变量结果而不是数组。因为您使用的Yaml正在使用Runners数组和api_version创建一个结构。
这个
var runners []Result
应该
var runners Result
因为因为struct不是切片。为yaml中使用的功能名称获取命令列表。您需要遍历runners数组以查找函数名称并获取该函数的命令值。下面是工作代码:
package main
import (
"fmt"
"log"
"gopkg.in/yaml.v2"
)
var runContent = []byte(`
api_ver: 1
runners:
- name: function1
type:
- command: spawn child process
- command: build
- command: gulp
- name: function2
type:
- command: run function 1
- name: function3
type:
- command: ruby build
- name: function4
type:
- command: go build
`)
type Result struct {
Version string `yaml:"api_ver"`
Runners []Runners `yaml:"runners"`
}
type Runners struct {
Name string `yaml:"name"`
Type []Command `yaml:"type"`
}
type Command struct {
Command string `yaml:"command"`
}
func main() {
var runners Result
// parse mta yaml
err := yaml.Unmarshal(runContent, &runners)
if err != nil {
log.Fatalf("Error : %v", err)
}
commandList := getCommandList("function1", runners.Runners)
fmt.Printf("%+v", commandList)
}
func getCommandList(name string, runners []Runners) []Command {
var commandList []Command
for _, value := range runners {
if value.Name == name {
commandList = value.Type
}
}
return commandList
}
操场上的例子
这是我第一次使用YAML文件,所以我首先想到的是找到任何可以帮助我解析文件的库。 我找到了两个库,YamlBean和snakeyaml。我不确定我要用哪一个。 下面是我试图解析的文件的一个示例: 该文件将动态更改,所以我不知道该文件将包含多少用户或组。 有人能帮我开始吗?最好的图书馆是什么?YamlBean还是Snakeyaml? 我想,我需要将这些信息保存在一个可以轻松重复的东西中。
问题内容: 这是我第一次使用YAML文件,因此我首先想到的是找到任何可以帮助我解析文件的库。 我发现了两个库YamlBean和SnakeYAML。我不确定我要使用哪一个。 这是我要解析的文件的示例: 该文件将动态更改,因此我不知道该文件将包含多少个用户或组。 我想从中获取的信息是用户名和类似的组: 并且仅从组中选择组名,如下所示: 有人可以让我从这里开始吗?最佳的库是什么?YamlBean或Sna
问题内容: 我有一个yaml文件,当前写为: 但是,此yaml文件经常更改,因此每次可以使用不同的值添加新条目: 我从使用gopkg.in/yaml.v2包开始就知道,如果所有值都相同,我可以解析yaml文件,例如: 在上面的示例中,它仅适用于密钥/狗密钥,而不适用于其他密钥。 当新值经常添加到yaml文件中时,如何在Go中执行此操作? 谢谢 问题答案: 如果您现在不精确的结构,则应该使您的结构看
我有这个yaml文件: 当我尝试解析。我的代码: 我能找到为什么我一直得到这个例外的原因。我试图修改缩进,但没有成功。也许与多个同一级别的数组有关?当我删除alerts属性时,它工作得很好。
我正在尝试解析一个映射并更新其中的值。。。下面是我制作hashmap的.txt文件的内容 第一行是键,JSON字符串是值。 这是我的解析代码: 我正在发送一个名为params的有效负载字符串,该字符串由“|”分隔符分隔。它们的输入必须有18个参数(在“|”分隔符之间有18个值)。我解析输入,如果它没有足够的参数,我会得到包含字符串“not_ough_parameters”的键,然后得到它的值,即J
我正在从Go中的YAML输入创建一个文档生成器。它需要指定每个项目/节点是从YAML文件的哪一行生成的。有没有办法在Go中实现? 例如,这是一个YAML文件 我希望看到以下内容 我看到一个类似的问题回答了Python解析YAML,返回行号,但我不知道如何利用https://pkg.go.dev/gopkg.in/yaml.v3