如何在Java中使用jackson将对象读/写到JSON文件

如何在Java中使用jackson将对象读/写到JSON文件,java,json,jackson,Java,Json,Jackson,我正在尝试使用 public class Town implements Serializable{ private Person p; private String hello; private long number; } public class Person implements Serializable { private String firstName; private double legs; private Strin

我正在尝试使用

public class Town implements Serializable{  

    private Person p;

    private String hello;
    private long number;
}

public class Person implements Serializable {

    private String firstName;
    private double legs;
    private String lastName;
}
这样就产生了Json

ObjectMapper mapper = new ObjectMapper();
ObjectWriter writer = mapper.writer(new DefaultPrettyPrinter());
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(file, true)));
 writer.writeValue(out, townobj);
当我尝试使用

{
  "p" : {
    "firstName" : "John",
    "amount" : 6860.0,
    "lastName" : "Smith"
  },
  "hello" : "qwiejiowcqnio",
  "number" : 1380.0
}

{
  "p" : {
    "firstName" : "Sam",
    "amount" : 623460.0,
    "lastName" : "Smith"
  },
  "hello" : "qwiej2342io",
  "number" : 1330.0
}
列出myObjects;
myObjects=mapper.readValue(新文件(“test.json”)、新类型引用(){};
我得到以下错误:


无法反序列化java.util.ArrayList的实例,因为它不在START_对象标记中

文件中的JSON不是有效数组,因此无法将其反序列化到
列表
。您需要将列表序列化为JSON,以便将其反序列化为列表:

writer.writeValue(out,Arrays.asList(townobj));

请查看此处的反序列化详细信息:您只编写了一个对象。因此,您应该只读取一个对象(而不是列表)。我有一个文本文件,其中充满了附加对象。我已经更新了代码。
List<Town> myObjects;       
myObjects = mapper.readValue(new File("test.json"), new TypeReference<List<Town>>(){});