java - 如何更改 .JSON 文件中的某些值,然后在保留 JSON 格式的情况下将其写回? ( java )

标签 java json mongodb

JSON 示例文件包含:

{
    "1st_key": "value1",
    "2nd_key": "value2",
    "object_keys": {
        "obj_1st": "value1",
        "obj_2nd": "value2",
        "obj_3rd": "value3",
    }
}

我使用此 StringBuilder 方法将 JSON 文件读入字符串,以便将换行符添加到字符串本身中。因此该字符串看起来与上面的 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_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 方法将新值写入对象,如下所示:

objectKeys.put("obj_1st","NEW_VALUE1");
objectKeys.put("obj_2nd","NEW_VALUE2");
objectKeys.put("obj_3rd","NEW_VALUE3");

!不需要以下部分,请查看下面我的答案。

更改对象后,我需要将其写回到json文件中,因此我需要将对象转换为字符串。有两种方法可以做到这一点,其中一种有效。

  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 文件,保留所有表格、空格等。

这有可能吗?

最佳答案

当您想要按照您所说的方式格式化某些内容时,即以一种漂亮/美丽的方式写入文件。例如:输出漂亮的json。在 Google 上快速搜索发现我认为可以解决您的问题。

Solution

关于java - 如何更改 .JSON 文件中的某些值,然后在保留 JSON 格式的情况下将其写回? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30057378/

相关文章:

java - 装饰一个继承 protected 可观察对象的类

java - 遍历 javax.json.JsonArray

javascript - 主干网未获取我的 JSON

php - 使用 mysql 查询时 JSON/PHP 不工作

java - 修饰符 static 只允许在常量变量声明中

java - 当父节点包含多个具有相同名称和属性列表但属性值不同的子节点时,XMLUnit 比较 XML 不起作用

java - 从计算引擎中的 docker 容器连接到 Cloud SQL

mongodb - 使用 MongoDB,需要选择哪些字段来构建索引?

javascript - Mongodb:一次更新同一文档中多个数组的元素

mongodb - 如何使用 nodejs 流式传输 MongoDB 查询结果?