ホームページ  >  記事  >  バックエンド開発  >  YAML を構造体または文字列のいずれかである複雑なオブジェクトにアンマーシャリングします。

YAML を構造体または文字列のいずれかである複雑なオブジェクトにアンマーシャリングします。

WBOY
WBOY転載
2024-02-09 08:48:29909ブラウズ

将 YAML 解组为复杂对象,可以是结构体或字符串

php エディターのイチゴの紹介: YAML は軽量のデータシリアル化形式で、簡潔で読みやすい構文を持ち、構成ファイルやデータ交換に広く使用されています。 PHP では、YAML 解析ライブラリを使用して、YAML データを構造体または文字列などの複雑なオブジェクトにアンマーシャリングできます。これにより、開発者は構成ファイルやその他のデータを簡単に処理および操作できるようになります。複雑なアプリケーションを構築する場合でも、構成管理を簡素化する場合でも、YAML 解析は PHP で重要な役割を果たします。

質問の内容

yaml を map[string]map[interface{}]string などの複雑なオブジェクトにアンマーシャリングしてみてください。 問題は、構造体である interface{}stringsource 部分を区別できるようにしたいことです。

リーリー

どうやら yaml は source 構造にアンマーシャリングする方法を知らないようです。そのため、unmarshaler インターフェイスを実装する必要があります。 リーリー

しかし、アンマーシャリングプロセスの全体的な状況がよくわかりません。一般的に、

*yaml.node を手動で繰り返し、各ノードで func unmarshalyaml(value *node) error を呼び出す必要があると思います。 リーリー

遊園地に行きます

解決策

type source struct {
    id     string `yaml:"id"`
    name   string `yaml:"name"`
    logoid string `yaml:"logoid"`
    url    string `yaml:"url"`
}

type unft struct {
    itemmeta map[string]map[interface{}]string `yaml:"item_meta"`
    // could be
    // itemmeta map[string]map[string]string `yaml:"item_meta"`
    // or
    // itemmeta map[string]map[source]string `yaml:"item_meta"`
}

https://www.php.cn/link/50f9999b2ee27e222c5513e945e9ea9c

マッピング タイプを変更しない必要がある場合、つまりカスタム キー タイプを追加しない場合は、unft にアンマーシャラーを実装し、

any: を使用して再マッピングすることもできます。 リーリー

https://www.php.cn/link/543378fb36a83810ded2d725f2b6c883

以上がYAML を構造体または文字列のいずれかである複雑なオブジェクトにアンマーシャリングします。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。