我 具有文件“ 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文件中每个密钥的旧加密值覆盖为所有对象的新解密值在数组中。
我要实现的目标
我在正确实现以下目标方面遇到困难:
我的尝试
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编写的代码质量,我也深表歉意!
答案 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));