0

我有一个复杂的类的实例列表:它有很多 val,包括嵌套类,这些类也有很多 val。我想以任何一种格式写入json文件xml

我找到了一个简单的示例,它似乎可以满足我的要求(尽管在 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 格式存储。

4

2 回答 2

2

使用杰克逊的例子:

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

s包含 JSON 作为字符串。

然后,您可以读回该值并将其转换回 POJO。用于ObjectMapper.

正如@veritas 在评论中提到的那样,您可以扩展 Jackson、自定义 {de,} 序列化等 - 哎呀,您甚至可以让它煮咖啡。但是默认值已经很不错了,所以你甚至不需要深入研究它。

于 2013-07-10T07:29:38.287 回答
0

我建议您使用一个知道如何将 POJO 对象序列化为 XML 或 JSon 的库。看看JAXBXStream杰克逊也是一个选择。

于 2013-07-10T07:30:34.843 回答