我正在读取一个包含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,
}
]
我想更新json数组中所有对象中的info和sometext键的值,以便使用更新的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()伪方法相同,因为我只是想知道自己是什么我的代码做错了
更新 解决了我的问题,查看答案
答案 0 :(得分:0)
您将在每次迭代中编写整个“ arrayObj”。可能是打算写出“ burObj”。
gson.toJson(burObj, new JsonWriter(bw));
答案 1 :(得分:0)
您可以这样做,
JSONObject json = jsonArray.getJSONObject(i);
json.put("info", "new text");
这里JSONObject将具有每个json和json.put(key,value)将根据密钥放置值
答案 2 :(得分:0)
我解决了我的问题
经过反复的反复试验,结果发现我需要在循环中创建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();
}