在json或xml中的文件中编写类的实例

时间:2013-07-10 07:23:32

标签: java xml json scala

我有一个类的实例列表,它有一些复杂的:它有许多val,包括嵌套类,它们也有很多val。我想以jsonxml格式写入文件。

我找到了一个简单的例子,似乎做了我想做的事情(虽然在Java中,但它确实无关紧要):

#Main.java
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class Main {

    public static void main(String args[]) {
        try {
            Employee employee = new Employee("0001", "Robert", "Newyork City", "IT");

            FileOutputStream fos = new FileOutputStream("my-data.txt");
            ObjectOutputStream oos = new ObjectOutputStream(fos);

            oos.writeObject(employee);

            oos.flush();
            oos.close();
            System.out.println("Employee Object written to file employee.dat");
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

#Employee.java
import java.io.Serializable;


public class Employee implements Serializable {
    private String empId;
    private String Name;
    private String Address;
    private String Dept;

    public Employee(String empId, String name, String address, String dept) {
        this.empId = empId;
        this.Name = name;
        this.Address = address;
        this.Dept = dept;
    }

    public String toString() {
        return "[Employee: " + empId + ", " + ", " + Name + ", " + Address + ", " + Dept + "]";
    }
}

我输出的是一个写在文件中的二进制数据。此外,toString()方法手动枚举所有字段,这对我的真实类来说是不可接受的。

那我该怎么做?如果你给它一个小例子,我真的很感激,而不是说“有一个名为X的库,使用它”。在我之前关于序列化的问题中,我已经在使用所有这些库时失败了。我不确定我需要的是序列化,因为我需要它以非二进制形式存储,而是以xml或json格式存储。

2 个答案:

答案 0 :(得分:2)

使用杰克逊的例子:

final ObjectMapper mapper = new ObjectMapper();
final String s = mapper.writeValueAsString(yourEmployee);

s包含JSON作为字符串。

然后您可以回读该值并转换回POJO。 Javadoc for ObjectMapper

正如@veritas在评论中提到的那样,你可以扩展杰克逊,自定义{de,}序列化等等 - 哎呀,你甚至可以把它煮咖啡。但是默认值已经非常好了,所以你甚至可能不需要钻研它的深度。

答案 1 :(得分:0)

我建议你使用一个知道如何将POJO对象序列化为XML或JSon的库。 请查看JAXBXStreamJackson也是一种选择。