yaml menggunakan berbilang kunci pemetaan kompleks sebagai struktur

WBOY
Lepaskan: 2024-02-09 19:12:09
ke hadapan
698 orang telah melayarinya

yaml 将多个复杂的映射键作为一个结构体

Editor PHP Youzi menyebut konsep penting semasa memperkenalkan YAML, iaitu menggunakan berbilang kunci pemetaan kompleks sebagai struktur. YAML ialah format yang digunakan untuk mewakili siri data dan sangat boleh dibaca oleh manusia. Dalam YAML, anda boleh menggunakan struktur untuk menggabungkan berbilang pasangan nilai kunci menjadi satu keseluruhan, menjadikan struktur data lebih jelas dan lebih mudah difahami. Pendekatan ini boleh membantu pembangun mengatur dan mengurus data kompleks dengan lebih baik serta meningkatkan kebolehbacaan dan kebolehselenggaraan kod. Dalam aplikasi praktikal, struktur adalah ciri yang sangat berguna, mari kita lihat!

Kandungan soalan

Saya ingin membongkar kunci peta kompleks ke dalam struktur:

yaml

unf:
    item_meta:
      source:
        ? id: "aa"
          name: "bb"
        : "some value"
Salin selepas log masuk

Struktur

type source struct {
    id     string `yaml:"id"`
    name   string `yaml:"name"`
}
Salin selepas log masuk

Semuanya berfungsi seperti yang diharapkan sehingga saya menambah kunci lain:

yaml 2

unf:
    item_meta:
      source:
        ? id: "012"
          name: "bill"
        : "some value"
        ? id: "066"
          name: "bob"
        : "another value"
Salin selepas log masuk

Saya mendapat ralat

"line xxx: mapping key "" already defined at line xxx"
Salin selepas log masuk

Saya memutuskan untuk menggunakan alias:

yaml 3

unf:
    item_meta:
      aliases:
        - bill: &alias_bill
          id: "012"
          name: "Bill"
        - bob: &alias_bob
          id: "066"
          name: "Bob"
      source:
        ? *alias_bill
        : "some value"
        ? *alias_bob
          name: "Bob"
        : "another value"
Salin selepas log masuk

Selesai masalah! Tetapi kami menggunakan hiera server dalam tindanan hiera server 并且 hiera dan hiera mengembalikan kandungan fail konfigurasi yang diganti, jadi saya mendapat versi yaml 2.

p> hiera 服务器 Ada idea bagaimana untuk menyelesaikan masalah ini? Tidak dapat mengkonfigurasi

.

Pergi ke taman permainan

Penyelesaian

Penyelesaian saya terutamanya berdasarkan soalan ini

@larsks

Ideanya adalah untuk mencari nod dengan kekunci peta pendua dan mencipta nilai tersuai daripada nod nilai nod peta. 🎜
func fixYamlNode(node *yaml.Node) {
    if node.Kind == yaml.MappingNode {
        length := len(node.Content)

        for i := 0; i < length; i += 2 {
            nodes := make([]*yaml.Node, 0)
            nodes = append(nodes, node.Content[i])
            for j := i + 2; j < length; j += 2 {
                nj := node.Content[j]
                if nodes[0].Kind == nj.Kind && nodes[0].Value == nj.Value {
                    nodes = append(nodes, nj)
                }
            }
            if len(nodes) == 1 {
                continue
            }

            fillMapValue(nodes)
        }

        for i := 1; i < length; i += 2 {
            valueNode := node.Content[i]
            fixYamlNode(valueNode)
        }
    }
}

func fillMapValue(nodes []*yaml.Node) {
    for _, node := range nodes {
        length := len(node.Content)
        for i := 0; i < length; i += 2 {
            node.Value = fmt.Sprintf("%s %s", node.Value, node.Content[i+1].Value)
        }
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci yaml menggunakan berbilang kunci pemetaan kompleks sebagai struktur. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!