如何读取yaml中的列表?

PLO*_*PLO 3 java yaml list

我试图从yaml文件读取输入,具有以下内容:

- !com.example.Contact
  name: Nathan Sweet
  age: 28
  address: pak
  phoneNumbers:
    - !com.example.Phone
      name: Home
      number: 1122
    - !com.example.Phone
      name: Work
      number: 3322
- !com.example.Contact
  name: Nathan Sw1eet
  age: 281
  address: pak1
  phoneNumbers:
    - !com.example.Phone
      name: Home1
      number: 11221
    - !com.example.Phone
      name: Work1
      number: 33211
Run Code Online (Sandbox Code Playgroud)

我有以下定义:

import java.util.List;
import java.util.Map;

public class Contact 
{
    public String name;
    public int age;
    public String address;
    public List phoneNumbers;
}
public class Phone
{
    public String name;
    public String number;
}
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我阅读这些电话号码的方法

qwe*_*rty 7

我不得不重写你的yaml ...

- !!com.example.Contact
  name: Nathan Sweet
  age: 28
  address: pak
  phoneNumbers:
    - !!com.example.Phone
      name: Home
      number: 1122
    - !!com.example.Phone
      name: Work
      number: 3322
- !!com.example.Contact
  name: Nathan Sw1eet
  age: 281
  address: pak1
  phoneNumbers:
    - !!com.example.Phone
      name: Home1
      number: 11221
    - !!com.example.Phone
      name: Work1
      number: 33211
Run Code Online (Sandbox Code Playgroud)

Java ......

package com.example;

import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.Constructor;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collection;

public class LoadContacts {
    private static String yamlLocation="classpath:contacts.yaml";

    public static void main(String[] args) throws IOException{
        Yaml yaml = new Yaml(new Constructor(Collection.class));
        InputStream in = null;
        Collection<Contact> contacts;
        try {
            in = new FileInputStream(new File(yamlLocation));
            contacts = (Collection<Contact>) yaml.load(in);
        } catch (IOException e) {
                final DefaultResourceLoader loader = new DefaultResourceLoader();
                final Resource resource = loader.getResource(yamlLocation);
                in = resource.getInputStream();
                contacts = (Collection<Contact>) yaml.load(in);
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (Exception e) {
                    // no-op
                }
            }
        }
        for(Contact contact:contacts){
            System.out.println(contact.name + ":" + contact.address + ":" + contact.age );
        }
    }
}
Run Code Online (Sandbox Code Playgroud)