Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何阅读yaml中的列表?_Java_List_Yaml - Fatal编程技术网

Java 如何阅读yaml中的列表?

Java 如何阅读yaml中的列表?,java,list,yaml,Java,List,Yaml,我正在尝试从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.Conta

我正在尝试从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
我有以下定义:

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;
}

能告诉我怎么读这些电话号码吗?你试过了吗?我不得不重写一下你的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
爪哇

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 );
        }
    }
}
package.com.example;
导入org.springframework.core.io.DefaultResourceLoader;
导入org.springframework.core.io.Resource;
导入org.yaml.snakeyaml.yaml;
导入org.yaml.snakeyaml.constructor.constructor;
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.IOException;
导入java.io.InputStream;
导入java.util.Collection;
公共类装入联系人{
私有静态字符串yamlocation=“classpath:contacts.yaml”;
公共静态void main(字符串[]args)引发IOException{
Yaml Yaml=新的Yaml(新构造函数(Collection.class));
InputStream in=null;
收集联系人;
试一试{
in=新文件输入流(新文件(yamlocation));
触点=(收集)yaml.load(输入);
}捕获(IOE异常){
final DefaultResourceLoader=新的DefaultResourceLoader();
最终资源=loader.getResource(yamlocation);
in=resource.getInputStream();
触点=(收集)yaml.load(输入);
}最后{
if(in!=null){
试一试{
in.close();
}捕获(例外e){
//无操作
}
}
}
用于(联系人:联系人){
System.out.println(contact.name+“:”+contact.address+“:”+contact.age);
}
}
}

由于我看到这篇文章是为了阅读用户对象列表,下面是我使用
Jackson

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;

import java.io.File;
import java.io.IOException;
import java.util.List;

public class LoadContacts {

  private static String yamlLocation = "path_to/../contacts.yml";

  public static void main(String[] args) throws IOException {
    ObjectMapper mapper = new ObjectMapper(new YAMLFactory());

    try {
      List<Contact> contactList = mapper.readValue(new File(yamlLocation), new TypeReference<List<Contact>>(){});
      contactList.forEach(System.out::println);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

SnakeYAML不需要这些标签。
   public List<Phone> phoneNumbers;