{
  "page": {
    "size": 2,
    "number": 2
  },
  "places": [
    {
      "eventName": "XYZ",
      "createdByUser": "xyz@xyz.com",
      "modifiedDateTime": "2021-03-31T09:59:48.616Z",
      "modifiedByUser": "xyz@xyz.com"
    }   
   ]}

Я пытаюсь обновить поле «eventName» новой строкой. Я пробовал использовать следующий код. Он обновляет поле, но возвращает только четыре поля в массиве json.

    public String modifyJson() throws Exception{
    String jsonString =  PiplineJson.payload(PiplineJson.filePath());
    System.out.println(jsonString);
    JSONObject jobject = new JSONObject(jsonString);
    String uu = jobject.getJSONArray("places")
                       .getJSONObject(0)
                       .put("eventName", randomString())
                       .toString();
    System.out.println(uu);
    return uu; 
}

Это то, что делает приведенный выше код.

{
  "eventName": "ABCD",
  "createdByUser": "xyz@xyz.com",
  "modifiedDateTime": "2021-03-31T09:59:48.616Z",
  "modifiedByUser": "xyz@xyz.com"
}

Я пытаюсь получить полный json после обновления поля eventName.

{
  "page": {
    "size": 2,
    "number": 2
  },
  "places": [
    {
      "eventName": "ABCD",
      "createdByUser": "xyz@xyz.com",
      "modifiedDateTime": "2021-03-31T09:59:48.616Z",
      "modifiedByUser": "xyz@xyz.com"
    }   
   ]}
0
peter 27 Ноя 2021 в 05:43

2 ответа

Лучший ответ

Проблема в том, как вы связываете операции вместе. Проблема в том, что вы вызываете toString() в результате вызова put. Вызов put возвращает внутренний JSONObject, для которого он был вызван. Таким образом, вы в конечном итоге сериализуете неправильный объект.

Изменяя это:

String uu = jobject.getJSONArray("places")
                   .getJSONObject(0)
                   .put("eventName", randomString())
                   .toString();

К

jobject.getJSONArray("places")
       .getJSONObject(0)
       .put("eventName", randomString());
String uu = jobject.toString();

Должно сработать.

1
Stephen C 27 Ноя 2021 в 05:55
Спасибо @Stephen C, это сработало
 – 
peter
27 Ноя 2021 в 05:59

Это потому, что вы возвращаете первый элемент, извлеченный из массива "places". Вместо этого вы должны вернуть «jobject.toString ()».

0
Federico V 27 Ноя 2021 в 06:00