提问人:Raj 提问时间:7/29/2023 最后编辑:Ajeet VermaRaj 更新时间:7/30/2023 访问量:61
当元素键不同但值相同时,我们如何比较两个 JSON 文件
How can we compare two JSON files when element keys are different but values are same
问:
我有两个来自两个 API 的 JSON 响应字符串
API1 响应:
{
"data": [
{
"sets": [
{
"type": "adImg",
"imgs": {
"attributes": [
{
"name": "bottomPadding",
"value": "true"
}
],
"img": {
"links": [
{
"linkType": "PRODUCT",
"label": "123",
"value": "1526783"
}
]}}}]}]}
API2 响应:
{
“values”: [
{
“contents”: [
{
"attributes": [
{
"attrName": "bottomPadding",
"attrValue": "true"
}
],
"nested-Content": {
"content": [
{
“type”: "PRODUCT",
“id”: "123",
“val”: "1526783"
}
]}}}]}]}
API1 响应中的键名称为:name、value、linkType、label、value
API2 响应中的键名称为:attrName、attrValue、type、id、val
但是,两个 API 响应中的元素值是相同的。
我们如何比较两个 API 响应以确认值相同?
答:
1赞
lucas-nguyen-17
7/30/2023
#1
对于这种特定情况,我认为逐个部分提取然后比较是最短的方法(就编码线而言)。
List<Object> first = new ArrayList<>(JsonPath.from(json1).getMap("data[0].sets[0].imgs.attributes[0]").values());
List<Object> first2 = new ArrayList<>(JsonPath.from(json2).getMap("values[0].contents[0].attributes[0]").values());
assertThat(first).isEqualTo(first2);
List<Object> second = new ArrayList<>(JsonPath.from(json1).getMap("data[0].sets[0].imgs.img.links[0]").values());
List<Object> second2 = new ArrayList<>(JsonPath.from(json2).getMap("values[0].contents[0]['nested-Content'].content[0]").values());
assertThat(second).isEqualTo(second2);
如果您想以一般方式解决这个问题,选项是将 API 响应映射到 Java 对象,然后比较 2 个对象。
评论
0赞
Raj
7/31/2023
感谢您的回复!,是的,我只在寻找对象比较。您能否给我一个解决方案,为两个响应创建对象并进行比较?
0赞
lucas-nguyen-17
7/31/2023
这篇文章可能会帮助你 phauer.com/2016/testing-restful-services-java-best-practices/...我不想为这个复杂的响应编写 POJO 解决方案。这是不必要的。
评论