如何解决通过忽略特定字段来获取两个json字符串的差异
我正在比较两个JSON字符串,并获得不同的区别。在这里,我想在比较时忽略一些字段。 杰克逊会提供这种便利还是其他图书馆更好?
Json1:
{
"name": "something","id": "1","version": "123"
}
Json2:
{
"name": "nothing","version": "12356"
}
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 举报,一经查实,本站将立刻删除。