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

WBOY
リリース: 2024-02-09 08:48:29
転載
889 人が閲覧しました

将 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 までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!