java - Gson - 为什么我的循环会弄乱我的 json 文件?
问题描述
这是我运行代码之前的“example.json”:
{
"example1": {
"example2": {
"example3": 30
}
}
}
当我运行此代码时:
JsonManager.writeString("example", "example1", "example2", "example7", "70");
这个功能:
public static void writeString(String fileName, String ... objects) throws IOException {
Path jsonFile = Paths.get("src/" + fileName + ".json");
try (BufferedReader reader = Files.newBufferedReader(jsonFile);
BufferedWriter writer = Files.newBufferedWriter(jsonFile, StandardOpenOption.WRITE)) {
Gson gson = new GsonBuilder().setPrettyPrinting().create();
JsonObject value = gson.fromJson(reader, JsonObject.class);
// Method 1:
value.getAsJsonObject(objects[0]).getAsJsonObject(objects[1]).addProperty(objects[2], objects[3]); //
// Method 2:
String property = null;
int i = 0;
for (String s : objects) {
i++;
if (i == objects.length) {
value.addProperty(property, s);
}
if (i == objects.length - 1) {
property = s;
} else {
value = value.getAsJsonObject(s);
}
} //
gson.toJson(value, writer);
}
}
现在,上面函数中的方法 1 可以有意地对“example.json”执行此操作:
{
"example1": {
"example2": {
"example3": 30,
"example7": "70"
}
}
}
方法 2 对“example.json”执行此操作:
null"example1": {
"example2": {
"example3": 30,
"example7": "70"
}
}
}
我不确定为什么会发生这种情况,我已经多次尝试修复它。
解决方案
这里有两个错误:
问题的实际原因:在最后一次执行循环时,
value.addProperty
调用,然后if
下降并else
执行块,导致您的结果。只需将 second 更改if
为else if
或在 之后添加一个 break即可value.addProperty
。修复后这仍然无法正常工作,因为您正在覆盖
value
变量(您在方法 1 中没有这样做)。尝试第一个修复程序,看看会发生什么,您的文件中将包含“双 json”。修复很简单:只写原始值,而不是操作后的值。
JsonObject value = gson.fromJson(reader, JsonObject.class);
JsonObject originalValue = value;
...
gson.toJson(originalValue, writer);
推荐阅读
- python - 如何在使用 get_duplicates() 时从废弃的代码中切换
- android - 如何在 Android 6.0 中正确请求位置权限?
- c# - GridView - 打开带有 ID 的新选项卡自定义按钮
- ios - 使用更新查询更新 sqlite 表中的值时出现问题
- xml - 如何在 MarkLogic 中包含子元素作为单词查询的一部分
- windows - “windbg”以系统帐户运行时无法加载符号
- sql-server - 什么图像用于通过 bitbucket 云自动将 SSIS 包部署到 SQL Server?
- c++ - 在 ROS 中运行 OpenCV 代码 - 错误:“DescriptorMatcher”未在此范围内声明
- flutter - 颤振:什么时候重建 const 小部件?
- ubuntu - 如何解决:无法导入名称“logsumexp”