问题
I'm trying to append JSON Object each time within an existing JSON Array. For that i'm using GSON libraries. Tried below code :
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();
}
But it created JSON array each time instead of appending.
Actual:
[
{
"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"
}
]
Expected :
[
{
"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"
}
]
Any help would be great appreciated.
回答1:
With your approach you might have a file that has many arrays each having one object. I suggest using Gson.fromJson(..) & Gson.toJson(..) instead of JsonWriter.
Assume the object you want to add is like:
@AllArgsConstructor
@Getter @Setter
public class OrderIDDetailBean {
private String uniqueID;
private Integer orderID;
private Date date;
private Double cartTotal;
}
then appending new object would go like:
@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();
}
来源:https://stackoverflow.com/questions/54574576/append-json-object-in-existing-json-file-using-java