Добавить объект json в существующий файл json, используя Java - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь каждый раз добавлять объект 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 Ответ

0 голосов
/ 07 февраля 2019

При вашем подходе у вас может быть файл с множеством массивов, каждый из которых имеет один объект.Я предлагаю использовать 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();        
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...