JSON示例文件包含:
{
"1st_key": "value1",
"2nd_key": "value2",
"object_keys": {
"obj_1st": "value1",
"obj_2nd": "value2",
"obj_3rd": "value3",
}
}
我使用此StringBuilder方法将JSON文件读入String,以便将新行添加到字符串本身中。所以String看起来与上面的JSON文件完全相同。
public String getJsonContent(String fileName) {
StringBuilder result = new StringBuilder("");
File file = new File(fileName);
try (Scanner scanner = new Scanner(file)) {
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
result.append(line).append("\n");
}
scanner.close();
} catch (IOException e) {
e.printStackTrace();
}
return result.toString();
}
然后我使用MongoDB API(使用DBObject,BasicDBObject和util.JSON)将JSON文件转换为Object,然后调出我需要更改的Object部分,即'object_keys':
File jsonFile = new File(C:\\example.json);
String jsonString = getJsonContent(jsonFile.getAbsolutePath());
DBObject jsonObject = (DBObject)JSON.parse(jsonString);
BasicDBObject objectKeys = (BasicDBObject) jsonObject.get("object_keys");
现在我可以使用PUT方法将新值写入Object:
objectKeys.put("obj_1st","NEW_VALUE1");
objectKeys.put("obj_2nd","NEW_VALUE2");
objectKeys.put("obj_3rd","NEW_VALUE3");
!以下部分不需要,请查看下面的答案。
在我更改了对象后,我需要将其写回json文件,因此我需要将Object转换为String。有两种方法可以做到这一点,其中一种方法都有效。
String newJSON = jsonObject.toString();
or
String newJSON = JSON.serialize(jsonObject);
然后我使用PrintWriter将内容写回文件
PrintWriter writer = new PrintWriter(C:\\example.json)
writer.print(newJSON);
writer.close();
我现在面临的问题是写入的字符串是一行,没有格式化。在某个地方,它失去了所有新行。所以它基本上是这样的:
{"1st_key": "value1","2nd_key": "value2","object_keys": { "obj_1st": "NEW_VALUE1","obj_2nd": "NEW_VALUE2","obj_3rd": "NEW_VALUE3", }}
我需要以与开头所示相同的格式编写JSON文件,保留所有制表,空格等。
这有可能吗?
答案 0 :(得分:0)
当你想要按照你所说的方式格式化某些内容时,它会以漂亮/漂亮的方式写入文件。例如:输出漂亮的json。快速搜索谷歌找到了我认为可以解决您的问题。
答案 1 :(得分:0)
您将不得不使用某种类型的json解析器。我个人更喜欢org.json,如果您正在操作json数据,我会推荐它,但您也可能喜欢json-io,这对于没有外部依赖性的json序列化非常有用。
使用json-io,它就像
一样简单String formattedJson = JsonWriter.formatJson(jsonObject.toString())
使用org.json,您只需将int传递给toString
方法。
答案 2 :(得分:0)
感谢Saraiva,我发现了一个令人惊讶的简单解决方案,谷歌搜索“漂亮的印刷JSON”并使用了Google GSON library。我下载了.jar并将其添加到Eclipse中的项目中。
这些是我需要的新进口商品:
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
由于我之前的代码已经可以使用JSON对象( jsonObject ),所以我只需要添加两行:
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String newJSON = gson.toJson(jsonObject);
现在,当我使用writer.print(newJSON);
时,它将以正确的格式编写JSON,格式精美且缩进。