java - 将新内容添加到 JSON 文件

标签 java json

我有一个名为“user.json”的 json 文件。现在我想添加一个新用户。我知道如何获取文件的内容并将其放入字符串中,但我不知道如何正确添加新内容。 “jsonString”是“user.json”的内容

    JSONParser parser = new JSONParser();
    Object object = parser.parse(jsonString);
    JSONObject jsonObject = (JSONObject) object;
    jsonObject.put("name", name);
    jsonObject.put("region", region);
    jsonObject.put("v1", v1);
    jsonObject.put("v2", v2);

    System.out.println(jsonObject.toJSONString()); 

输出为:

{
    "v1": false,
    "v2": false,
    "name": "test",
    "region": "",
    "user": [
        {
            "v1": "true",
            "v2": "true",
            "name": "UserName",
            "region": ""
        }
    ]
}

但应该是:

{
    "user": [
        {
            "v1": "true",
            "v2": "true",
            "name": "UserName",
            "region": ""
        },
        {
            "v1": false,
            "v2": false,
            "name": "test",
            "region": ""
        }
    ]
}

有人知道该怎么做吗? 我查了一下,但所有的例子都不适合我,因为当我尝试

JSONObject object = new JSONObject(jsonString);

JSONArray array = new JSONArray(jsonString);

我总是得到“构造函数未定义”。

编辑: user.json的内容

{"user":[
{"name":"Testuser1", "region":"A", "v1":"false", "v2":"false"},
{"name":"Testuser2", "region":"B", "v1":"true", "v2":"true"},
{"name":"Testuser3", "region":"B", "v1":"false", "v2":"false"},
{"name":"Testuser4", "region":"A", "v1":"true", "v2":"true"},
{"name":"Testuser5", "region":"A", "v1":"false", "v2":"false"}

]}

编辑2: 我解决了这个问题

    Object object = parser.parse(new          FileReader(classLoader.getResource("user.json").getFile()));
    JSONObject jsonObject = (JSONObject) object;
    JSONArray array = (JSONArray) jsonObject.get("user");

    JSONObject newObject = new JSONObject();
    newObject.put("name", name);
    newObject.put("region", region);
    newObject.put("v1", v1);
    newObject.put("v2", v2);
    array.add(newObject);

    Map<String, JSONArray> map = new HashMap<>();
    map.put("\"user\"", array);
    String mapInhalt = map.toString();
    if (mapInhalt.contains("=")) {
        System.out.println("yop");
        mapInhalt.replaceFirst("=", ":");
    }
    System.out.println(mapInhalt);

最佳答案

看来您正在向 jsonObject 添加字段,而您想要执行的操作基本上是将新对象添加到内部 json 数组(在本例中,字段是称为“用户”

试试这个:

JSONObject newObject=new JSONObject();
newObject.put("name", name);
newObject.put("region", region);
newObject.put("v1", v1);
newObject.put("v2", v2);
jsonObject.getJSONArray("user").add(newObject)

关于java - 将新内容添加到 JSON 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33689441/

相关文章:

JSON 数据未传递到 tableView Cell

javascript - JQuery Ajax Json 响应不起作用

java - 是否有 java 不允许泛型类数组的解决方法

java - Error :(124, 62)错误:不兼容的类型:无法将类转换为上下文

java - 如何修改jar包代码然后重新导出更新的jar包?

java - 如何序列化 Jackson Joda 日期格式?

Java : My error is a cannot find symbol in run method for Threads?

java - IntelliJ 中基于目录的项目

sql - 在 SQL 中查询 JSON

javascript - 如何使用jquery以表格形式动态显示json数据?