微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过忽略特定字段来获取两个json字符串的差异

如何解决通过忽略特定字段来获取两个json字符串的差异

我正在比较两个JSON字符串,并获得不同的区别。在这里,我想在比较时忽略一些字段。 杰克逊会提供这种便利还是其他图书馆更好?

Json1:

{
    "name": "something","id": "1","version": "123"
}

Json2:

{
    "name": "nothing","version": "12356"
}

我正在使用以下代码查找上述示例json字符串之间的区别

ObjectMapper mapper = new ObjectMapper();
JsonNode node1 = mapper.valuetoTree(json1);
JsonNode node2 = mapper.valuetoTree(json2);
String diff = JsonDiff.asJson(node1,node2).toString();
logger.info("Difference: " + diff);

但是我想在比较上述示例JSON的JSON时忽略版本

Jackson 可以这样做还是可以使用其他更好的库吗?

解决方法

如果需要现成的实现,则可以参考: https://github.com/java-json-tools/json-patch

否则,如果要求是简单的嵌套对象,并且您想在比较期间忽略属性,则可以实现ObjectMapper并重写equals方法。 要从比较中删除文件,您可以执行以下操作:

((ObjectNode)node1).remove("version");
((ObjectNode)node2).remove("version");

然后,您只需调用JsonDiff进行分析即可。

,

我可以通过使用不同的库成功实现它:

进口

    import com.fasterxml.jackson.databind.JsonNode;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.flipkart.zjsonpatch.JsonDiff;
    import com.jayway.jsonpath.DocumentContext;
    import com.jayway.jsonpath.JsonPath;

代码段

DocumentContext existingDoc = JsonPath.parse(json1);
DocumentContext incomingDoc = JsonPath.parse(json2);

existingDoc.delete("version");
incomingDoc.delete("version");

JsonNode existingNode = mapper.readTree(existingDoc.jsonString());
JsonNode incomingNode = mapper.readTree(incomingDoc.jsonString());

String diffs = JsonDiff.asJson(existingNode,incomingNode).toString();

logger.info("Difference: " + diffs);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。