比较两个 JSON 并显示我们更改了哪一列的活动?

Posted

技术标签:

【中文标题】比较两个 JSON 并显示我们更改了哪一列的活动?【英文标题】:Compare two JSON and also show activity which column we changed? 【发布时间】:2021-09-14 13:39:09 【问题描述】:

如何比较两个 JSON,一个来自数据库,另一个来自 UI(意味着当我单击编辑按钮时)?如何比较这两个 JSON?

第一个 Json

 
            "id": 2,
            "createdAt": "07-01-2021 15:26:16",
            "updatedAt": "07-01-2021 15:26:16",
            "offerAcceptedDate": "06-30-2021 07:14:00",
            "offerAmount": 100000,
            "offerDate": "06-30-2021 07:14:00",
            "offerFile": "string",
            "possibleCloseDate": "06-30-2021 07:14:00",
            "remarks": "string",
            "salesId": 8,
            "status": "Active",
            "contactId": 32,
            "createdById": 1,
            "offerAcceptedById": 1
        

第二个 JSON


                
                "createdAt": "09-01-2021 15:26:16",
                "updatedAt": "10-01-2021 15:26:16",
                "offerAcceptedDate": "06-30-2021 07:14:00",
                "offerAmount": 500000,
                "offerDate": "06-30-2021 07:14:00",
                "offerFile": "string",
                "possibleCloseDate": "06-30-2021 07:14:00",
                "remarks": "string",
                "salesId": 8,
                "status": "Active",
                "contactId": 32,
                "createdById": 1,
                "offerAcceptedById": 1
            

此外,比较这两个 JSON 并显示活动“哪一列”发生了变化。 像这样:

createdAt: Changed

updatedAt: Changed

offeramount: Changed

【问题讨论】:

【参考方案1】:

1)首先我使用 findById(JPA Repository) 从数据库获取数据

2)比较Db字段和请求正文字段

像这样:

LeadOffer leadOffer = leadOfferRepository.findById(offerId).orElse(null);
        JsonObject jsonObject = new JsonObject();
                JsonArray jsonArray= new JsonArray();
            if (leadOffer.getAmount() != leadOfferRequest.getAmount())
                    
                        offer.setAmount(leadOfferRequest.getAmount());
                        jsonObject.addProperty("amount",leadOfferRequest.getAmount() );
                        jsonObject1.addProperty("amount",leadOffer.getAmount() );
            
                    
    jsonArray.add(jsonObject);

【讨论】:

【参考方案2】:

您可以为此目的使用guava 库。例如:

  String json1 = "\"name\":\"ABC\", \"city\":\"XYZ\", \"state\":\"CA\"";
  String json2 = "\"city\":\"XYZ\", \"street\":\"123 anyplace\", \"name\":\"ABC\"";

  Gson g = new Gson();
  Type mapType = new TypeToken<Map<String, Object>>().getType();
  Map<String, Object> firstMap = g.fromJson(json1, mapType);
  Map<String, Object> secondMap = g.fromJson(json2, mapType);
  System.out.println(Maps.difference(firstMap, secondMap).entriesDiffering());

这显示了两个映射中都存在但具有不同值的键

【讨论】:

以上是关于比较两个 JSON 并显示我们更改了哪一列的活动?的主要内容,如果未能解决你的问题,请参考以下文章

Win8 XAML Grid 点击了哪一列和哪一行

Scala Spark,比较两个 DataFrame 并选择另一列的值

按列和值比较两个 csv 文件并显示不同值的行号 [关闭]

如何知道用户在 SwiftUI 中的日期选择器中触摸了哪一天

程序员实现财务自由的9个阶段,你达到了哪一段?

COOIS如何更改显示列?