「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Go で動的キーを使用して YAML ファイルを解析するにはどうすればよいですか?

Go で動的キーを使用して YAML ファイルを解析するにはどうすればよいですか?

2024 年 11 月 20 日に公開
ブラウズ:237

How to Parse YAML Files with Dynamic Keys in Go?

動的キーを含む YAML 解析 Go コード

動的キーを含む YAML ファイル内の Go コードを解析するには、次の手順に従います。 ]

1. yaml をインストールします。ライブラリ:

go get gopkg.in/yaml.v2

2. モデル構造の定義: 表現する構造の作成YAML データ。考えられるキーをすべて知っている場合は、通常のフィールドを使用してそれらを定義できます。そうでない場合は、map[string]interface{} フィールドを使用して動的キーを含めることができます。

3. カスタム Unmarshaler を使用します (オプション): YAML データの解析方法をカスタマイズする必要がある場合は、カスタム Unmarshaler を使用できます。これは、動的キーやその他の複雑な解析シナリオを処理するのに役立ちます。

4. YAML データを解析する: yaml.Unmarshal 関数を使用して、YAML データを解析し、モデル構造に逆シリアル化します。

例:次の例は、動的キーを使用して YAML ファイルを解析する方法を示しています:

package main

import (
    "fmt"

    "gopkg.in/yaml.v2"
)

var data = `
---
development:
  skip-header-validation: true
  V1:
    current: "1.0.0"
    mime_types:
      - application/vnd.company.jk.identity json;
      - application/vnd.company.jk.user json;
      - application/vnd.company.jk.role json;
      - application/vnd.company.jk.scope json;
      - application/vnd.company.jk.test json;
    skip-mime-type-validation: true
    skip-version-validation: true
  V2:
    current: "2.0.0"
    mime_types:
      - application/vnd.company.jk.identity json;
      - application/vnd.company.jk.user json;
      - application/vnd.company.jk.role json;
      - application/vnd.company.jk.scope json;
      - application/vnd.company.jk.test json;

`

type MajorVersion struct {
    Current                 string   `yaml:"current"`
    MimeTypes               []string `yaml:"mime_types"`
    SkipVersionValidation  bool     `yaml:"skip-version-validation"`
    SkipMimeTypeValidation bool     `yaml:"skip-mime-type-validation"`
}

type Environment struct {
    SkipHeaderValidation bool
    Versions             map[string]MajorVersion `yaml:",inline"`
}

func main() {
    e := map[string]Environment{}
    if err := yaml.Unmarshal([]byte(data), &e); err != nil {
        fmt.Println(err.Error())
    }
    fmt.Printf("%#v\n", e)
}
出力:

map[string]main.Environment{ "発達": { SkipHeaderValidation: true、 バージョン: { "V1": { 現在: "1.0.0"、 MimeType: {"application/vnd.company.jk.identity json;"、"application/vnd.company.jk.user json;"、"application/vnd.company.jk.role json;"、"application/vnd. company.jk.scope json;", "application/vnd.company.jk.test json;"}, SkipVersionValidation: true、 SkipMimeTypeValidation: true、 }、 "V2": { 現在: "2.0.0"、 MimeType: {"application/vnd.company.jk.identity json;"、"application/vnd.company.jk.user json;"、"application/vnd.company.jk.role json;"、"application/vnd. company.jk.scope json;", "application/vnd.company.jk.test json;"}, SkipVersionValidation: false、 SkipMimeTypeValidation: false、 }、 }、 }、 }
            
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3