代码之家  ›  专栏  ›  技术社区  ›  NarendraR TheSociety

使用JAVA在JSON文件中添加JSON对象

  •  0
  • NarendraR TheSociety  · 技术社区  · 7 年前

    我尝试在现有的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"
       }
    ]
    

    任何帮助都将不胜感激。

    1 回复  |  直到 7 年前
        1
  •  1
  •   pirho    7 年前

    使用您的方法,您可能有一个文件,其中包含多个数组,每个数组有一个对象。我建议使用 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();        
    }