【问题标题】:how to remove a json object from a json file?如何从 json 文件中删除 json 对象?
【发布时间】:2015-02-17 12:05:49
【问题描述】:

我想从这个 json 文件 using org.jsoncom.googlecode.json-simple 中删除年龄?

假设这个 json 对象在文件 test.json 中?

    {
        "age":100,
        "name":"mkyong.com",
        "messages":["msg 1","msg 2","msg 3"]
    }

删除文件后应该是test.json。

    {
        "name":"mkyong.com",
        "messages":["msg 1","msg 2","msg 3"]
    }

请告诉我如何从json文件中取出json对象?

【问题讨论】:

  • 我的回答能解决您的问题吗,您还需要更多信息吗?

标签: java json


【解决方案1】:

从文件中读取并解析

Path file = Paths.get("test.json");
String input = new String(Files.readAllBytes(file), StandardCharsets.UTF_8);
JSONObject obj = (JSONObject) JSONValue.parse(input);

去掉你不想要的键,注意 JSONObject 实现 java.util.Map...

obj.remove("age");

编码为字符串并写回文件

String output = JSONValue.toJSONString(obj);
Files.write(file, output.getBytes(StandardCharsets.UTF_8));

输入

{"age":100,"name":"mkyong.com","messages":["msg 1","msg 2","msg 3"]}

输出

{"name":"mkyong.com","messages":["msg 1","msg 2","msg 3"]}

【讨论】:

    【解决方案2】:

    这将遍历 Json 对象的所有最顶层键,并删除那些通过条件的键。

        try {
            JSONObject jsonObject = (JSONObject) new JSONParser().parse(new FileReader("test.json"));
            Set keys = jsonObject.keySet();
            Iterator iterator = keys.iterator();
            while (iterator.hasNext()) {
                String key = (String) iterator.next();          
                if (key.equals("age")) {
                    System.out.println("REMOVING KEY:VALUE")
                    System.out.println(key + ":" + jsonObject.get(key).toString());
                    iterator.remove();
                    jsonObject.remove(key);
                }
            }
            try (FileWriter file = new FileWriter("test.json")) { //store data
                file.write(jsonObject.toJSONString());
                file.flush();
            }
        } catch (IOException | ParseException ex) {
            System.out.println("Error: " + ex);
        }
    

    iterator.remove() 必须在 jsonObject.remove(key) 之前

    【讨论】:

      【解决方案3】:

      我尝试了同样的方法,但我的输出不同。

      JSONObject getJsonResp = (JSONObject)obj; getJsonResp.remove("消息")

      原始 JSON{"name":"ALK","messages":["msg 1","msg 2","msg 3"],"age":100} 删除后 ["msg 1","msg 2","msg 3"]

      【讨论】:

      • 然而这工作 getJsonResp.keySet().remove("messages")
      猜你喜欢
      • 2017-03-25
      • 2021-03-24
      • 1970-01-01
      • 2020-10-15
      • 2014-10-15
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多