Append json object in existing json file using Java

帅比萌擦擦* 提交于 2019-12-25 02:59:40

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!