Yaml: تحليل تسلسل البيانات في القائمة

تم إنشاؤها على ١٤ ديسمبر ٢٠١٦  ·  3تعليقات  ·  مصدر: go-yaml/yaml

البيانات

-
  ip: 192.168.1.1
  role: master
-
  ip: 192.168.1.2
  role: node
-
  ip: 192.168.1.3
  role: node

الهيكل هو

type NODE struct {
    node []struct {
        ipaddr string
        role   string
    } `yaml:",flow"`
}

كود الاعراب هو

    n := NODE{}

    err := yaml.Unmarshal([]byte(data), &n)
    if err != nil {
        log.Fatalf("error: %v", err)
    }
    fmt.Printf("--- t:\n%v\n\n", n)

ثم فشلت مع بقية المقال:

2016/12/14 17:13:39 error: yaml: unmarshal errors:
  line 2: cannot unmarshal !!seq into main.NODE

التعليق الأكثر فائدة

بعد المعاناة مع هذا لبضع ساعات ، اكتشفت ذلك بعد 5 دقائق من اختبار اتصال هذا الموضوع (نعتذر عن ذلك!) كان التعليق في https://github.com/go-yaml/yaml/issues/101#issuecomment -178792007 مساعدة ضخمة.

في حالتي ، كنت أحاول تحليل ملف Ansible requirements.yaml والذي يبدو كالتالي:

---
- src: franklinkim.php5-newrelic
- src: geerlingguy.composer
- src: geerlingguy.java
- src: geerlingguy.nginx
- src: geerlingguy.nodejs
- src: geerlingguy.php
- src: geerlingguy.php-versions
- src: geerlingguy.rabbitmq
- src: geerlingguy.solr
- src: newrelic.newrelic-infra

- name: mycustomrole
  src: [email protected]:foo/bar.git
  scm: git
  version: master

- src: https://github.com/nickhammond/ansible-logrotate
  name: nickhammond.logrotate

كان لدي هيكل كهذا ، والذي كان صحيحًا:

type AnsibleSource struct {
    Source  string  `yaml:"src"`
    Name    *string `yaml:"name,omitempty"`
    Type    *string `yaml:"scm,omitempty"`
    Version *string `yaml:"version,omitempty"`
}

ولكن لإلغاء تنظيم تسلسل المستوى الأعلى بشكل صحيح (وحل الخطأ cannot unmarshal !!seq ) كان عليّ إلغاء تنظيمه عبر var out []AnsibleSource كما يلي:

    source, err := ioutil.ReadFile(ansibleRequirements.Path)
    if err != nil {
        return
    }

    var out []AnsibleSource

    err = yaml.Unmarshal(source, &out)
    if err != nil {
        return
    }

    fmt.Println(requirements)

آمل أن يساعد هذا شخص آخر!

ال 3 كومينتر

vanloswang أحصل على نفس الخطأ. كيف حل هذا؟

@ alexforever86 هل وجدت حلاً يومًا ما؟

بعد المعاناة مع هذا لبضع ساعات ، اكتشفت ذلك بعد 5 دقائق من اختبار اتصال هذا الموضوع (نعتذر عن ذلك!) كان التعليق في https://github.com/go-yaml/yaml/issues/101#issuecomment -178792007 مساعدة ضخمة.

في حالتي ، كنت أحاول تحليل ملف Ansible requirements.yaml والذي يبدو كالتالي:

---
- src: franklinkim.php5-newrelic
- src: geerlingguy.composer
- src: geerlingguy.java
- src: geerlingguy.nginx
- src: geerlingguy.nodejs
- src: geerlingguy.php
- src: geerlingguy.php-versions
- src: geerlingguy.rabbitmq
- src: geerlingguy.solr
- src: newrelic.newrelic-infra

- name: mycustomrole
  src: [email protected]:foo/bar.git
  scm: git
  version: master

- src: https://github.com/nickhammond/ansible-logrotate
  name: nickhammond.logrotate

كان لدي هيكل كهذا ، والذي كان صحيحًا:

type AnsibleSource struct {
    Source  string  `yaml:"src"`
    Name    *string `yaml:"name,omitempty"`
    Type    *string `yaml:"scm,omitempty"`
    Version *string `yaml:"version,omitempty"`
}

ولكن لإلغاء تنظيم تسلسل المستوى الأعلى بشكل صحيح (وحل الخطأ cannot unmarshal !!seq ) كان عليّ إلغاء تنظيمه عبر var out []AnsibleSource كما يلي:

    source, err := ioutil.ReadFile(ansibleRequirements.Path)
    if err != nil {
        return
    }

    var out []AnsibleSource

    err = yaml.Unmarshal(source, &out)
    if err != nil {
        return
    }

    fmt.Println(requirements)

آمل أن يساعد هذا شخص آخر!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات