Изменение значений ключей в файле массива json и запись измененных значений в тот же файл - PullRequest
0 голосов
/ 20 июня 2019

I имеет массив json в файле "test.json".массив содержит следующее:

    [
      {
        "txt": "this text is encrypted"
        "ft": "this text is encrypted",
        "Id": 2,
        "No": 2,
      },
      {
        "txt": "this text is encrypted"
        "ft": "this text is encrypted",
        "Id": 42,
        "No": 2,
      },
      {
        "txt": "this text is encrypted"
        "ft": "this text is encrypted",
        "Id": 12,
        "No": 24,
      },
      .
      .
      .
      . ~ 800 objects, each have the same signature 
      {
        "txt": "this text is encrypted"
        "ft": "this text is encrypted",
        "Id": 47,
        "No": 4,
      }

    ]

Задача

Что я пытаюсь сделать, это прочитать test.json,пройти через каждый ключ "txt" и "ft" каждого объекта в массиве отдельно (значения этих ключей зашифрованы, и я уже кодировал метод, который расшифровывает эти значения) и передать эти значения отдельно в мой метод decrypt (), который возвращаетдешифрованная строка, соответственно, затем перезаписать старые зашифрованные значения каждого из этих ключей в файле test.json на новые расшифрованные значения для всех объектов в массиве.

Что яЯ пытаюсь достичь

Мне трудно добиться правильного выполнения следующих действий:

  • Доступ к "txt" и "ft "значения каждого объекта по одному;два в объекте.
  • передают значения "txt" и "ft" соответственно методу decrypt ().
  • хранят возвращенные дешифрованные строки из метода decrypt () во временных переменных строки
  • Записать эти временные строковые переменные непосредственно в файл, перезаписав, таким образом, исходные (зашифрованные) значения «txt» и «ft» новыми расшифрованными значениями.1035 *

    Моя попытка

    final String JSON_PATH = "/test.json";
            BufferedReader br = new BufferedReader(new FileReader(JSON_PATH));
            JsonParser parser = new JsonParser();
            JsonArray arrayObj = parser.parse(br).getAsJsonArray();
    
    for (JsonElement elm : arrayObj) {
                JsonObject burObj = elm.getAsJsonObject();
                String  temp_fn  ;  
                String  temp_txt  ; 
                String  _fn = burObj.get("ft").getAsString();
                String  _txt = burObj.get("txt").getAsString();
                temp_fn = Decrypt(_fn);
                temp_txt= Decrypt(_txt);
    }
    

    Это все, что я получил до того, как мой мозг перестал работать, как как я мог написатьрасшифровывает строку до правильного значения ключа и перезаписывает их, сохраняя файл test.json открытым для цикла for, чтобы пройти через следующий объект в массиве и повторить весь процесс до его завершения.

    Также я прошу прощения за качество кода, который я не кодировал в Java в течение 5 лет!


Ответы [ 2 ]

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

Если все ваши объекты имеют одинаковую подпись, рассмотрите возможность создания класса, содержащего эти поля:

public class Encrypted {
    String txt;
    String ft;
    @SerializedName("Id")
    int id;
    @SerializedName("No")
    int no;
}

Затем прочитайте ваш JSON следующим образом:

Collection<Encrypted> data = new Gson().fromJson(new JsonReader(new FileReader(filename)), new TypeToken<Collection<Encrypted>>(){}.getType());

Переберите объекты, измените их соответствующим образом (расшифровка) и сохраните

Collection<Encrypted> data;

в файл JSON снова, используя:

new Gson().toJson(data, new FileWriter(filename));
0 голосов
/ 20 июня 2019

Восстановить новый объект json в файл. Или этот подход не работает для вас?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...