繁体   English   中英

如何在运行时从json数组中删除完整条目

[英]How to delete a complete entry from json array at run-time

我想在运行时通过提供要删除的值来删除JSON数组记录。

我已经尝试了以下代码,但是在每个值上都添加了一个/

原始Json文件:
{"Products":[{"p10":"SamsungS5"},{"i6":"Iphone6"}]}

执行删除操作后,输出变为:
{"Products":[["{\\"p10\\":\\"SamsungS5\\"}","{\\"i6\\":\\"Iphone6\\"}"]]}

remove方法的代码是:

public static void removeSearchedClass(String value ) throws IOException, ParseException, InvocationTargetException {


        Object obj = new JSONParser().parse(new FileReader(FILE_NAME));
        JSONObject jo = (JSONObject) obj; 


        ArrayList<String> list = new ArrayList<String>();     
        JSONArray solutions = (JSONArray) jo.get("Products");
        int len = solutions.size();
        if (solutions != null) { 
           for (int i=0;i<len;i++){ 
            list.add(solutions.get(i).toString());
           } 
        }
                list.remove(value.trim());

        solutions.clear();
        solutions.add(list);

        jo.put("Products", solutions);

        FileWriter file = new FileWriter(FILE_NAME, false);
        file.append(jo.toString());
        file.flush();
        file.close(); 
         }

输入“ Iphone6”时,需要删除Iphone6的完整条目,即{"i6":"Iphone6"}

使用JSON-PJSR-374 )(它是JavaEE(现在为EE4J )规范的一部分 ),您可以执行以下操作:

String jsonString = "{\"Products\":[{\"p10\":\"SamsungS5\"},{\"i6\":\"Iphone6\"}]}";
String removeValue = "\"Iphone6\"";

JsonReader jsonReader = Json.createReader(new StringReader(jsonString));
JsonObject jsonObj = jsonReader.readObject();

JsonPatchBuilder builder = Json.createPatchBuilder();

JsonArray jsonArray = jsonObj.getJsonArray("Products"); // [{"p10":"SamsungS5"},{"i6":"Iphone6"}]
for (int i = 0; i < jsonArray.size(); i++) {
    JsonObject entry = jsonArray.get(i).asJsonObject();
    for (JsonValue value : entry.values()) {
        if (value.toString().equals(removeValue)) {
            builder.remove("/Products/" + i);
        }
    }
}

JsonPatch patch = builder.build();
JsonObject newObj = patch.apply(jsonObj);
System.out.println(newObj); // {"Products":[{"p10":"SamsungS5"}]}

“产品”数组包含JSON条目(一个键值对,例如{"i6":"Iphone6"} )。 然后,您遍历每个条目的值(尽管只有一个: "Iphone6" )。 如果它与您要删除的内容相匹配,请修改补丁程序以删除该条目的索引。 然后将修补程序应用于JSON对象。

依赖关系是规范,例如JavaEE:

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>8.0</version>
    <scope>provided</scope>
</dependency>

以及JSON-P的实现,例如Glassfish:

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.json</artifactId>
    <version>1.1.4</version>
</dependency>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM