修改json数组文件中的键值,并将更改后的值写入同一文件

时间:2019-06-20 18:30:57

标签: java gson

具有文件“ test.json”中的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”(这些键的值已加密,并且我已经对该方法进行了编码解密这些值),然后将这些值分别传递给我的crypto()方法,该方法分别返回解密的字符串,然后将test.json文件中每个密钥的旧加密值覆盖为所有对象的新解密值在数组中。

  

我要实现的目标

我在正确实现以下目标方面遇到困难:

  • 一次访问每个对象的“ txt”和“ ft”值;两个在一个物体上。
  • 分别将“ txt”和“ ft”值传递给crypto()方法。
  • 将来自crypto()方法的返回的解密字符串分别存储在临时字符串变量中。
  • 直接将这些临时字符串vars写到文件中,从而用新的解密值覆盖“ txt”和“ ft”的原始值(已加密)。
  

我的尝试

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循环通过数组中的下一个对象,然后再次执行整个过程,直到完成为止。

对于5年内未用Java编写的代码质量,我也深表歉意!


2 个答案:

答案 0 :(得分:0)

将新的json对象保存到文件中。还是这种方法对您不起作用?

答案 1 :(得分:0)

如果所有对象都具有相同的签名,请考虑创建一个包含以下字段的类:

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));