【问题标题】:Get JSON paths to value from JSON从 JSON 获取值的 JSON 路径
【发布时间】:2018-12-19 06:38:42
【问题描述】:

我正在尝试编写一个函数来从 yaml 文件中获取值的所有路径,但我不知道这怎么可能,这是我的代码:

func getpath(fileyaml) string {

   if _, err := os.Stat(fileyaml); err == nil {
   bfile, err := ioutil.ReadFile(fileyaml)
   bjson, err := yaml.YAMLToJSON(bfile)
   if err != nil {
      fmt.Printf("YAMLToJSON err: %v\n", err)
   }

   json := string(bjson)

   println json
   paths := ? // don't know 
    return path 

这里是我的 yaml 文件:

sentinel:
  number: 3
server:
  number: 7
config:
  fere_size: 5
lcmea:
  eza_ze: all

我的函数会将其转换为 json:{"config":{"fere_size":5},"lcmea":{"eza_hooks":"all"},"sentinel":{"number":3},"server":{"number":7}}

我想要的输出:

sentinel.number=3, server.number=3,config.fere_size=5,lcmea.eza_ze=all

如何解析此 json 以获得所需的输出?

我正在使用“github.com/tidwall/gjson”来读取yaml并将其转换为json

【问题讨论】:

  • 为什么需要将其转换为 json,您可以将 YAML 解组为一个结构,然后打印该结构的必填字段
  • 你怎么能展示一个例子,因为我的 yaml 改变它是动态的

标签: go yaml


【解决方案1】:

这是您如何做到这一点的示例:https://play.golang.org/p/7yLq_PDLdXF

它非常幼稚,绝对可以改进,但它可能会让您了解如何解析 yaml 文件,然后以您想要的格式打印输出:

package main

import (
    "fmt"
    "log"
    "strings"

    "github.com/go-yaml/yaml"
)

var data = `
sentinel:
  number: 3
server:
  number: 7
config:
  fere_size: 5
lcmea:
  eza_ze: all
`

func main() {
    m := make(map[string]map[string]interface{})

    err := yaml.Unmarshal([]byte(data), &m)
    if err != nil {
        log.Fatalf("error: %v", err)
    }

    out := []string{}
    for k, v := range m {
        for j, i := range v {
            out = append(out, fmt.Sprintf("%s.%v=%v", k, j, i))
        }
    }

    fmt.Println(strings.Join(out, ", "))
}

它会返回:

$ go run main.go
sentinel.number=3, server.number=7, config.fere_size=5, lcmea.eza_ze=all

它使用https://github.com/go-yaml/yaml,查看README.md上的更多示例

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 2016-01-18
    • 1970-01-01
    • 2021-10-24
    • 2020-08-19
    • 1970-01-01
    相关资源
    最近更新 更多