обновить значение в файле массива json - PullRequest
0 голосов
/ 26 июня 2019

Я читаю файл json, который содержит массив json, и пытаюсь обновить некоторые значения ключей во всех объектах массива jason и записать новый обновленный массив json в другой файл.

Файл со следующим массивом json:

 [
      {
        "info": "old text"
        "sometext": "old text",
        "Id": 2,
        "No": 12,
      },
      {
        "info": "old text"
        "sometext": "old text",
        "Id": 68,
        "No": 22,
      },
      {
        "info": "old text"
        "sometext": "old text",
        "Id": 87,
        "No": 15,
      }

 ]

Я хочу обновить значения ключей info и sometext во всех объектах массива json так, чтобы вывод в новый файл с обновленным массивом json был (это мой желаемый вывод, которого я хочу добиться с помощью моего код):

 [
      {
        "info": "new text"
        "sometext": "new text",
        "Id": 2,
        "No": 12,
      },
      {
        "info": "new text"
        "sometext": "new text",
        "Id": 68,
        "No": 22,
      },
      {
        "info": "new text"
        "sometext": "new text",
        "Id": 87,
        "No": 15,
      }

 ]

пока это мой код:

final String JSON_PATH = "old.json";
final String JSON_PATH1 = "new.json";

BufferedWriter bw = new BufferedWriter(new FileWriter(JSON_PATH1));
BufferedReader br = new BufferedReader(new FileReader(JSON_PATH));
JsonParser parser = new JsonParser();
JsonArray arrayObj = parser.parse(br).getAsJsonArray();


for(int i=0; i < arrayObj.size();i++) {
    JsonObject burObj = arrayObj.get(i).getAsJsonObject();
    String  old_info = burObj.get("info").getAsString();
    String  old_sometext = burObj.get("sometext").getAsString();
    burObj.addProperty(NewTextGen(old_info), "info");
    burObj.addProperty(NewTextGen(old_sometext), "sometext");
    burObj.remove(old_info);
    burObj.remove(old_sometext);
    Gson gson = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create();
    gson.toJson(arrayObj, new JsonWriter(bw));
}

когда я запускаю этот код, я получаю бессмысленный вывод как новых, так и старых значений а не мой желаемый вывод.

бредовой вывод:

 [
      {
        "info": "old text"
        "sometext": "old text",
        "info": "new text"
        "sometext": "new text",
        "Id": 2,
        "No": 12,
      },
      {
        "info": "old text"
        "sometext": "old text",
        "info": "new text"
        "sometext": "new text",
        "Id": 68,
        "No": 22,
      },
      {
        "info": "old text"
        "sometext": "old text",
        "info": "new text"
        "sometext": "new text",
        "Id": 87,
        "No": 15,
      },
      {
        "info": "old text"
        "sometext": "old text",
        "info": "new text"
        "sometext": "new text",
      }

 ]

обратите внимание, что старый текст и новый текст - просто фиктивный текст, а не фактический текст, то же самое с фиктивным методом NewTextGen (), так как я только пытаюсь узнать, что я делаю неправильно в моем коде


UPDATE Решил мою проблему, проверь ответы

Ответы [ 3 ]

0 голосов
/ 26 июня 2019

Вы можете сделать что-то вроде этого,

JSONObject json =  jsonArray.getJSONObject(i);
json.put("info", "new text");

Здесь JSONObject будет иметь каждый json, а json.put (ключ, значение) поместит значение на основе ключа

0 голосов
/ 26 июня 2019

Я решил свою проблему

После некоторых изнурительных проб и ошибок оказалось, что мне нужно создать свой BufferedWriter внутри цикла, где я перебираю элементы объектов в jsonмассив.Также мне нужно было сбрасывать () BufferedWriter в конце.В .remove () вообще не было необходимости.

final String JSON_PATH = "old.json";
final String JSON_PATH1 = "new.json";

BufferedWriter bw = new BufferedWriter(new FileWriter(JSON_PATH1));
BufferedReader br = new BufferedReader(new FileReader(JSON_PATH));
JsonParser parser = new JsonParser();
JsonArray arrayObj = parser.parse(br).getAsJsonArray();


for (int i = 0; i < arrayObj.size(); i++) {

     JsonObject burObj = arrayObj.get(i).getAsJsonObject();

     burObj.getAsJsonObject().addProperty("info", NewTextGen(burObj.get("info").getAsString());
     burObj.getAsJsonObject().addProperty("sometext", NewTextGen(burObj.get("sometext").getAsString());

     Gson gson = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create();
     FileWriter fr = new FileWriter(JSON_PATH1);
     BufferedWriter bw = new BufferedWriter(fr);
     gson.toJson(arrayObj, new JsonWriter(bw));
     bw.flush();


    }
0 голосов
/ 26 июня 2019

Вы пишете целый arrayObj на каждой итерации. Вероятно, намеревался написать «burObj».

gson.toJson(burObj, new JsonWriter(bw));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...