使用snakeyaml将此文件解析为对象的简单方法是什么?

时间:2013-01-19 22:02:56

标签: java parsing file-io snakeyaml

假设我有一个需要传递以下格式的文件

Name: XYZ
 SSN: 123

Name: ABC
 SSN: 456

假设我创建了以下类

Class Data{
 String name;
 int ssn;
 }

现在我需要解析上面的文件,对于每个条目,我需要创建一个data类型的对象。我怎么能用Java中的snakeyaml来做呢?

2 个答案:

答案 0 :(得分:1)

长话短说,我无法与SnakeYaml合作,但我可以让它与YamlBeans合作。以下是YAML文档的样子(修复了上一个答案中的错误后):

-
  name: XYZ
  ssn: 123
-
  name: ABC
  ssn: 456

这是来源:

import java.io.FileNotFoundException;
import java.io.FileReader;

import com.esotericsoftware.yamlbeans.YamlException;
import com.esotericsoftware.yamlbeans.YamlReader;

public class ArraySpike
{
    public static void main(String[] args) throws FileNotFoundException, YamlException
    {
        System.out.println("Parsing " + args[0] + " ...\n");

        YamlReader reader = new YamlReader(new FileReader(args[0]));

        Data[] dArray = reader.read(Data[].class);

        for (Data d: dArray)
        {
            System.out.println("name: " + d.name);
            System.out.println("ssn: " + d.ssn + "\n");
        }

    }
}

根据我之前的评论,我将“数据”类更改为适当的bean。

答案 1 :(得分:0)

我自己是YAML和SnakeYaml的新手,但我注意到的第一件事是你的“Class”类不是Java Bean。你需要为“name”和“ssn”制作getter和setter。我注意到的第二件事是你的班级成员的姓名和你的YAML文件中的信息不一致(“姓名”与“姓名”,“SSN”与“ssn”)。最后,YAML文档中“SSN”之前的空格将导致问题。