我试图每次在现有JSON数组中附加JSON对象。为此,我正在使用GSON库。尝试以下代码:
OrderIDDetailBean ord = new OrderIDDetailBean();
ord.uniqueID = "sadasdas0w021";
ord.orderID = "Nand";
ord.cartTotal = "50";
ord.date = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss.SSS").format(new Date());
try {
JsonWriter writer = new JsonWriter(new FileWriter("D:\\file.json", true));
writer.beginArray();
writer.beginObject();
writer.name("uniqueID").value(ord.uniqueID);
writer.name("orderID").value(ord.orderID);
writer.name("cartTotal").value(ord.cartTotal);
writer.name("date").value(ord.date);
writer.endObject();
writer.endArray();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
但是它每次都创建JSON数组而不是附加。
实际:
[
{
"uniqueID":"CHECKOUT_ES01",
"orderID":"5001787761",
"date":"07-02-2019 15:31:41.637",
"cartTotal":"11.44"
}
]
[
{
"uniqueID":"CHECKOUT_ES01",
"orderID":"5001787767",
"date":"07-02-2019 15:35:20.347",
"cartTotal":"11.44"
}
]
预期:
[
{
"uniqueID":"CHECKOUT_ES01",
"orderID":"5001787761",
"date":"07-02-2019 15:31:41.637",
"cartTotal":"11.44"
},
{
"uniqueID":"CHECKOUT_ES01",
"orderID":"5001787767",
"date":"07-02-2019 15:35:20.347",
"cartTotal":"11.44"
}
]
任何帮助将不胜感激。
答案 0 :(得分:2)
使用这种方法,您可能会拥有一个文件,其中包含许多数组,每个数组都有一个对象。我建议使用Gson.fromJson(..)
和Gson.toJson(..)
而不是JsonWriter
。
假设您要添加的对象如下:
@AllArgsConstructor
@Getter @Setter
public class OrderIDDetailBean {
private String uniqueID;
private Integer orderID;
private Date date;
private Double cartTotal;
}
然后添加新对象将如下:
@Test
public void test() throws Exception {
Gson gson = new GsonBuilder().setPrettyPrinting().create();
// construct Type that tells Gson about the generic type
Type dtoListType = new TypeToken<List<OrderIDDetailBean>>(){}.getType();
FileReader fr = new FileReader("test.json");
List<OrderIDDetailBean> dtos = gson.fromJson(fr, dtoListType);
fr.close();
// If it was an empty one create initial list
if(null==dtos) {
dtos = new ArrayList<>();
}
// Add new item to the list
dtos.add(new OrderIDDetailBean("23", 34234, new Date(), 544.677));
// No append replace the whole file
FileWriter fw = new FileWriter("test.json");
gson.toJson(dtos, fw);
fw.close();
}