我有一个看起来像这样的JSON数组:
[ {
"name" : "1",
"date" : "30/03 19:36:20"
}, {
"name" : "12",
"date" : "30/03 19:36:21"
}, {
"name" : "123",
"date" : "30/03 19:36:22"
}, {
"name" : "1234",
"date" : "30/03 19:36:23"
}, {
"name" : "12345",
"date" : "30/03 19:36:25"
} ]
我怎么可能用java中的名称删除一个对象,就像让我们假设要删除1个对象一样?
{
"name" : "1",
"date" : "30/03 19:36:20"
},
我怎么可能只删除那些行,因为目前我的代码会删除文件中的所有条目
public static void deleteSavefile() throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(new File("savefiles.json"));
for (JsonNode node : jsonNode) {
((ObjectNode)node).remove("name");
((ObjectNode)node).remove("date");
}
objectMapper.writeValue(new File("savefiles.json"), jsonNode);
}
答案 0 :(得分:1)
如果jsonNode
是Array
的{{1}},则Objects
返回Iterator <jsonNode.elements()
,通过使用JsonNode>
条件检查具有{ {1}},然后删除整个节点
if
答案 1 :(得分:1)
如果您想从ArrayNode
中删除一个元素,只需
final JsonNode json = objectMapper.readTree(new File("savefiles.json"));
if (json.isArray()) {
for (final Iterator<JsonNode> i = json.elements(); i.hasNext(); ) {
final JsonNode jsonNode = i.next();
if ("1".equals(jsonNode.get("name").asText())) {
i.remove();
}
}
}
这将不创建一个新实例。原始的TreeNode
(是ArrayNode
)得到保留。
比较时还要注意.asText()
。
流版本是
final ArrayNode filtered =
StreamSupport.stream(json.spliterator(), false)
.filter(e -> !"1".equals(e.get("name").asText()))
.collect(Collector.of(
objectMapper::createArrayNode,
(array, element) -> array.add(element),
(result, toMerge) -> result.addAll(result)
));
答案 2 :(得分:1)
读取列表中的json,在列表中进行迭代,找到元素并将其删除。
ObjectMapper objectMapper = new ObjectMapper();
// read in a list
List<Map<String, String>> jsonList = objectMapper.readValue(new File("savefiles.json"), new TypeReference<List<Map<String, String>>>(){});
// remove object with name "1"
jsonList = jsonList.stream().filter(e -> !"1".equals(e.get("name"))).collect(Collectors.toList());
通过定义具有两个字段name
和date
的bean类,可以进一步简化操作,然后可以使用List<Map<String, String>
代替List<BeanClass>
。
// read in a list
List<BeanClass> jsonList = objectMapper.readValue(new File("savefiles.json"), new TypeReference<List<BeanClass>>(){});
// remove object with name "1"
jsonList = jsonList.stream().filter(e -> !"1".equals(e.getName())).collect(Collectors.toList());
直接在此处编写代码,可能会有一些错字。