如何读取 YAML 文件

     2023-02-26     229

关键词:

【中文标题】如何读取 YAML 文件【英文标题】:How to read a YAML file 【发布时间】:2015-09-05 23:47:11 【问题描述】:

我在读取 YAML 文件时遇到问题。我认为这是文件结构中的一些东西,但我不知道是什么。

YAML 文件:

conf:
  hits:5
  time:5000000

代码:

type conf struct 
    hits int64 `yaml:"hits"`
    time int64 `yaml:"time"`



func (c *conf) getConf() *conf 

    yamlFile, err := ioutil.ReadFile("conf.yaml")
    if err != nil 
        log.Printf("yamlFile.Get err   #%v ", err)
    
    err = yaml.Unmarshal(yamlFile, c)
    if err != nil 
        log.Fatalf("Unmarshal: %v", err)
    

    return c

【问题讨论】:

您看到的错误是什么? @AmitKumarGupta 我没有收到任何错误,只是空结构 您认为这可能与您的问题相关吗?另外,您可以粘贴重现问题的完整代码吗? package main,您正在导入什么文件,main 函数等,以便人们可以轻松地帮助您复制粘贴代码并在本地运行它。考虑添加便于人们帮助您的信息和代码,因为您希望人们帮助您。 如前所述,任何通过反射(JSON、XML、YAML 解组等)设置字段的东西都只能在导出的字段上工作。 【参考方案1】:

你的 yaml 文件必须是

hits: 5
time: 5000000

您的代码应如下所示:

package main

import (
    "fmt"
    "gopkg.in/yaml.v2"
    "io/ioutil"
    "log"
)

type conf struct 
    Hits int64 `yaml:"hits"`
    Time int64 `yaml:"time"`


func (c *conf) getConf() *conf 

    yamlFile, err := ioutil.ReadFile("conf.yaml")
    if err != nil 
        log.Printf("yamlFile.Get err   #%v ", err)
    
    err = yaml.Unmarshal(yamlFile, c)
    if err != nil 
        log.Fatalf("Unmarshal: %v", err)
    

    return c


func main() 
    var c conf
    c.getConf()

    fmt.Println(c)

主要错误是结构的大写字母。

【讨论】:

导出标识符的规范:golang.org/doc/go_spec.html#Exported_identifiers 这对我不起作用。我需要将err = yaml.Unmarshal(yamlFile, c) 行更改为err = yaml.Unmarshal(yamlFile, &c),即传递指针而不是值。我不知道为什么。 它通过类型 conf 结构绑定到代码。如果配置文件更改,将无法重用。有没有什么是动态的,无需在代码中定义结构? @joelfischerr 你说得对,我必须做出同样的改变才能正常工作。 @MopparthyRavindranath 我认为您需要使用接口来执行此操作,但为什么配置文件会更改多次?【参考方案2】:

使用升级后的 第 3 版 yaml 包。

conf.yaml 文件示例:

conf:
  hits: 5
  time: 5000000
  camelCase: sometext

main.go 文件:

package main

import (
    "fmt"
    "io/ioutil"
    "log"

    "gopkg.in/yaml.v3"
)

type myData struct 
    Conf struct 
        Hits      int64
        Time      int64
        CamelCase string `yaml:"camelCase"`
    


func readConf(filename string) (*myData, error) 
    buf, err := ioutil.ReadFile(filename)
    if err != nil 
        return nil, err
    

    c := &myData
    err = yaml.Unmarshal(buf, c)
    if err != nil 
        return nil, fmt.Errorf("in file %q: %v", filename, err)
    

    return c, nil


func main() 
    c, err := readConf("conf.yaml")
    if err != nil 
        log.Fatal(err)
    
    fmt.Printf("%v", c)

运行说明(如果这是您第一次退出标准库):

go mod init example.com/whatever
go get gopkg.in/yaml.v3
cat go.sum
go run .

标签(如 yaml:"field")对于任何全小写的 yaml 密钥标识符都是可选的。对于节目,我已经包含了一个用于 camelCase 标识符的节目。

(令人困惑的是,“yaml”的这种小写行为在标准“json”包中没有。如果您的结构同时用于 JSON 和 YAML 编码,最好在几乎每个领域。冗长,但减少错误。)

【讨论】:

【参考方案3】:
package main

import (
    "gopkg.in/yaml.v2"
    "io/ioutil"
    "log"
)

type someConf struct 
    AccessKeyID     string `yaml:"access_key_id"`
   //...


func getConf(file string, cnf interface) error 
   yamlFile, err := ioutil.ReadFile(file)
   if err == nil 
      err = yaml.Unmarshal(yamlFile, cnf)
   
   return err


func main() 
    cfg := &awsConf
    if err := getConf("conf.yml", cfg); err != nil 
        log.Panicln(err)
    
 

有史以来最短的 getConf

【讨论】:

如何在 java 中读取 YAML 文件?

】如何在java中读取YAML文件?【英文标题】:HowtoreadfromYAMLfileinjava?【发布时间】:2020-11-0908:40:45【问题描述】:我有这样的YAML文件..Product:ProductA:Suite:SuiteName_A:Environment_1:["A","B","C"]Environment_2:["X","Y","Z"]SuiteName_B:Environment_1:["E","F 查看详情

如何将 YAML 文件解析/读取到 Python 对象中?

】如何将YAML文件解析/读取到Python对象中?【英文标题】:Howtoparse/readaYAMLfileintoaPythonobject?【发布时间】:2011-10-1513:07:48【问题描述】:例如,这个YAML:Person:name:XYZ到这个Python类:classPerson(yaml.YAMLObject):yaml_tag=\'Person\'def__init__(sel... 查看详情

如何从 python 中的嵌套 YAML 文件中读取数据?

】如何从python中的嵌套YAML文件中读取数据?【英文标题】:HowtoreaddatafromnestedYAMLfileinpython?【发布时间】:2020-07-0513:56:24【问题描述】:我有例如swagger.yaml文件,我想从中读取一些变量。例如那个文件:https://editor.swagger.io/下面... 查看详情

python——yaml

...amlRead_yaml.py※问题:1.含有多个文件的yaml文件,读取出来如何选择?2.持续写入能否将新写入的文件变成新的文件结构?※PS:觉得这篇文章有用的朋友,多多点赞打赏哦~! 查看详情

如何从 electron-builder yaml 配置文件中的 .env 文件中读取?

】如何从electron-builderyaml配置文件中的.env文件中读取?【英文标题】:Howtoreadfrom.envfileinelectron-builderyamlconfigfile?【发布时间】:2020-11-1001:01:45【问题描述】:我是电子新手。我有一个用电子包裹的角度应用程序,我想使用electron-... 查看详情

读取python的yaml配置文件(代码片段)

...是Sqlite还是Postgres的操作,然后会引发异常,但我不知道如何。我尝试了但失败了,我在做什么错?我的test.yaml文件:db:mysqldbopt:host:zppp8alnTQc6jpfb.cds6ifjzc2el.ap-northeast-1.rds.amazonaws.comp 查看详情

如何使用 Pipeline Utility Steps 插件更新现有 yaml 文件的内容

】如何使用PipelineUtilitySteps插件更新现有yaml文件的内容【英文标题】:HowtoupdatethecontentofanexistingyamlfilewithPipelineUtilityStepsplugin【发布时间】:2019-10-2801:13:18【问题描述】:在我的jenkins管道中,我正在使用PipelineUtilitySteps插件读取... 查看详情

如何在 OpenCV 中编辑/更新 YAML 文件?

】如何在OpenCV中编辑/更新YAML文件?【英文标题】:Howtoedit/updateYAMLfileinOpenCV?【发布时间】:2012-07-0823:16:57【问题描述】:在OpenCV中编辑/更新YAML/YML文件的最佳方法是什么?【问题讨论】:使用YAML库?我觉得yaml-cpp还不错。如何... 查看详情

如何在 azure devops 中解析 yaml 文件

】如何在azuredevops中解析yaml文件【英文标题】:Howtopossibleparseyamlfileinazuredevops【发布时间】:2021-12-3103:40:09【问题描述】:如何解析yaml文件以从中提取appVersion?我可以将文件内容与文件内容一起读取到变量中以获取所有内容但... 查看详情

yaml文件使用

参考技术AYAML入门教程参考:python读取yaml文件Python常用配置文件ini、json、yaml读写总结读取yaml文件(数组用下标[x],字典用[key])编写一个py文件,读取yaml文件,yaml文件需要通过safe_load方法转换成字典格式,然后再通过字典取值的... 查看详情

python读取yaml文件

简介在实际开发过程中,我们可能需要读取一些配置文件的配置信息,例如ini、yaml、property等格式,本文将讲述怎么去获取和设置yaml文件的相关参数。示例yaml文件test1:test2-1:5test2-2:130000test2-3:test3-1:123test 查看详情

从yaml文件读取配置,然后修改配置,怎样更新到yaml文件

参考技术Ajava可以通过引入依赖:<dependency><groupId>org.yaml</groupId><artifactId>snakeyaml</artifactId></dependency>通过创建yaml对象:Yamlyaml=newYaml();通过yaml.loadAs方法读取配置,修改之后通过yaml.dump方法去更新文件 查看详情

Golang YAML 使用地图读取

...aml.v1包来阅读这个更扁平的版本,但我一直在试图弄清楚如何在这个YAM 查看详情

数据驱动-yaml文件读取

   数据驱动YAML文件类型Ⅰ#最外层定义了两个列表,yaml文件在被读取的时候,user和msg会被遍历,输出两个字典-user:  username:admin  password:\'123456\'msg:success-user:  username:admin  passwo 查看详情

用Javascript从YAML文件中读取[重复]

】用Javascript从YAML文件中读取[重复]【英文标题】:ReadingfromYAMLFileinJavascript[duplicate]【发布时间】:2012-11-2622:42:44【问题描述】:我正在尝试将YAML文件中的参数读入Javascript。有什么好的图书馆可以做到这一点吗?我试过这些库:... 查看详情

yaml配置注入(代码片段)

...erson类:2.yaml文件内容:3.出现提示:4.测试加载指定配置文件读取其他文件(yaml)1.新建配置文件2.加载配置文件(student类)读取其他文件(properties)1.新建配置文件2.加载配置文件(student类)读取其他文 查看详情

c#开发的openra的yaml文件读取和分析

C#开发的OpenRA的yaml文件读取和分析在前面已经看到OpenRA所有资源管理,都是来源于mod.yaml文件。说明了这个文件是一个资源描述的清单,系统启动之初就会读取这个文件,以便得到当前游戏所有资源列表。从前面分析整个mod.yaml... 查看详情

c#开发的openra的yaml文件读取和分析

C#开发的OpenRA的yaml文件读取和分析在前面已经看到OpenRA所有资源管理,都是来源于mod.yaml文件。说明了这个文件是一个资源描述的清单,系统启动之初就会读取这个文件,以便得到当前游戏所有资源列表。从前面分析整个mod.yaml... 查看详情