我想通过提供要删除的值在运行时删除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"}
。
答案 0 :(得分:1)
使用JSON-P(JSR-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>