2014-06-24 54 views
2

我在web服務中編寫了Post數據的代碼,它發送響應數據和代碼。我使用select查詢在sql中發佈相同的數據。我的情況是我需要檢查responsedata和sql數據是否相同。如何比較java中的Json響應數據和sql數據

Mysql.java

public ArrayList<DisputeSummaryarraylistobject> connectSqlconnectiondisputesummary() throws SQLException, ClassNotFoundException{ 

     ArrayList<DisputeSummaryarraylistobject> DisputeSummaryarraylistobjectlist = new ArrayList<DisputeSummaryarraylistobject>(); 
     String connectionUrl = "jdbc:sqlserver://localhost:1433;" + 
     "databaseName=AdventureWorks;user=UserName;password=*****"; 
     try {   
     Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
     sqlConnection = DriverManager.getConnection(connectionUrl); 
     String sqlStatement = "Enter the sql statement"; 
     stateMent = sqlConnection.createStatement(); 
     resultSet = stateMent.executeQuery(sqlStatement); 
     DisputeSummaryarraylistobject disputeSummaryarraylistobject = new DisputeSummaryarraylistobject(); 
     while (resultSet.next()) 
     { 
      disputeSummaryarraylistobject.setchargeback(resultSet.getInt("chargeback")); 
      disputeSummaryarraylistobject.setactiveDisputes(resultSet.getInt("activeDisputes")); 
      disputeSummaryarraylistobject.setrecentUpdates(resultSet.getInt("recentUpdates")); 
      disputeSummaryarraylistobject.setrecentlyClosed(resultSet.getInt("recentlyClosed")); 
      disputeSummaryarraylistobject.setresponseRequired(resultSet.getInt("responseRequired")); 
      disputeSummaryarraylistobject.inProgress(resultSet.getInt("inProgress")); 
      disputeSummaryarraylistobject.setclosedInFavor(resultSet.getInt("closedInFavor")); 
      disputeSummaryarraylistobject.setclosedChargebacks(resultSet.getInt("closedChargebacks")); 

      DisputeSummaryarraylistobjectlist.add(disputeSummaryarraylistobject); 
     } 
     } 
    catch (Exception e) { 
     e.printStackTrace(); 
     } 
    return DisputeSummaryarraylistobjectlist; 
    } 

}

Myjsonresponse.java

public void convertResponseoutputtojsonobject() throws IOException, ParseException { 

    logger.info("convertResponseoutputtojsonobject() : BEGINs "); 
    JSONParser jsonParser = new JSONParser(); 
    Object object = jsonParser.parse(response.toString()); 
    JSONArray jsArray = (JSONArray) object; 
    Iterator<JSONObject> iterator = jsArray.iterator(); 
    while (iterator.hasNext()) { 
     JSONObject jsonObj = iterator.next(); 
     list.add(jsonObj);   
    } 
    logger.info(list.toString()); 
    logger.info("convertResponseoutputtojsonobject() : ENDS "); 
} 

輸出:響應數據將與formart被存儲在list.tostring()

{ 
    "chargeback": 5, 
    "activeDisputes": 12, 
    "recentUpdates": 10, 
    "recentlyClosed": 12, 
    "responseRequired": 8, 
    "inProgress": 4, 
    "closedInFavor": 4, 
    "closedChargebacks": 8 
    } 

我需要c ompare list.tostring值和sql值。任何人都可以提供解決方案如何比較?

+2

我覺得讓你的手比較是容易出錯,無法讀取。我建議您使用GSON將JSON轉換爲java對象,並直接將一些ORM或JPA轉換爲DBRow爲Object,然後實現適當的equals()以比較它們... – vach

+0

您的意思是您要比較生成的字符串通過此代碼生成一個字符串不同? –

+0

想出一個能夠產生相同字符串(JSON)的SQL查詢會不會更容易? –

回答

0

如果你有一個DisputeSummaryarraylistobject與正確的等號和散列碼方法,那麼你可以使用Gson直接解析JSON數據到對象並進行比較。例如。

import java.lang.reflect.Type; 
import java.util.List; 

import com.google.gson.Gson; 
import com.google.gson.reflect.TypeToken; 

public class JsonCompare { 

    public static void main(String[] args) { 
     String jsonData = "{ \"chargeback\": 5, \"activeDisputes\": 12, \"recentUpdates\": 10, \"recentlyClosed\": 12, \"responseRequired\": 8, \"inProgress\": 4, \"closedInFavor\": 4, \"closedChargebacks\": 8 }"; 

     Gson gson = new Gson(); 
     DisputeSummaryarraylistobject webserviceObject = gson.fromJson(jsonData, DisputeSummaryarraylistobject.class); 

     //DDObject 
     DisputeSummaryarraylistobject dbObject = new DisputeSummaryarraylistobject(); 
     dbObject.setChargeback(5); 
     dbObject.setActiveDisputes(12); 
     dbObject.setRecentUpdates(10); 
     dbObject.setRecentlyClosed(12); 
     dbObject.setResponseRequired(8); 
     dbObject.setInProgress(4); 
     dbObject.setClosedInFavor(4); 
     dbObject.setClosedChargebacks(8); 

     System.out.println(webserviceObject.equals(dbObject)); 

     // If you have an array of objects 
     String jsonDataArray = "[ { \"chargeback\": 5, \"activeDisputes\": 12, \"recentUpdates\": 10, \"recentlyClosed\": 12, \"responseRequired\": 8, \"inProgress\": 4, \"closedInFavor\": 4, \"closedChargebacks\": 8 }, " 
       + " { \"chargeback\": 6, \"activeDisputes\": 7, \"recentUpdates\": 8, \"recentlyClosed\": 2, \"responseRequired\": 5, \"inProgress\": 14, \"closedInFavor\": 14, \"closedChargebacks\": 5 } ]"; 
     Type listType = new TypeToken<List<DisputeSummaryarraylistobject>>() {}.getType(); 
     List<DisputeSummaryarraylistobject> disputeSummaryArraylistobjectList = gson.fromJson(jsonDataArray, listType); 
     System.out.println(disputeSummaryArraylistobjectList); 

     //Now you can iterate through the array and compare the objects with equals. 
    } 

} 

樣本爭議摘要Object

public class DisputeSummaryarraylistobject { 
    private int chargeback; 
    private int activeDisputes; 
    private int recentUpdates; 
    private int recentlyClosed; 
    private int responseRequired; 
    private int inProgress; 
    private int closedInFavor; 
    private int closedChargebacks; 

    public int getChargeback() { 
     return chargeback; 
    } 
    public void setChargeback(int chargeback) { 
     this.chargeback = chargeback; 
    } 
    public int getActiveDisputes() { 
     return activeDisputes; 
    } 
    public void setActiveDisputes(int activeDisputes) { 
     this.activeDisputes = activeDisputes; 
    } 
    public int getRecentUpdates() { 
     return recentUpdates; 
    } 
    public void setRecentUpdates(int recentUpdates) { 
     this.recentUpdates = recentUpdates; 
    } 
    public int getRecentlyClosed() { 
     return recentlyClosed; 
    } 
    public void setRecentlyClosed(int recentlyClosed) { 
     this.recentlyClosed = recentlyClosed; 
    } 
    public int getResponseRequired() { 
     return responseRequired; 
    } 
    public void setResponseRequired(int responseRequired) { 
     this.responseRequired = responseRequired; 
    } 
    public int getInProgress() { 
     return inProgress; 
    } 
    public void setInProgress(int inProgress) { 
     this.inProgress = inProgress; 
    } 
    public int getClosedInFavor() { 
     return closedInFavor; 
    } 
    public void setClosedInFavor(int closedInFavor) { 
     this.closedInFavor = closedInFavor; 
    } 
    public int getClosedChargebacks() { 
     return closedChargebacks; 
    } 
    public void setClosedChargebacks(int closedChargebacks) { 
     this.closedChargebacks = closedChargebacks; 
    } 
    @Override 
    public int hashCode() { 
     final int prime = 31; 
     int result = 1; 
     result = prime * result + activeDisputes; 
     result = prime * result + chargeback; 
     result = prime * result + closedChargebacks; 
     result = prime * result + closedInFavor; 
     result = prime * result + inProgress; 
     result = prime * result + recentUpdates; 
     result = prime * result + recentlyClosed; 
     result = prime * result + responseRequired; 
     return result; 
    } 
    @Override 
    public boolean equals(Object obj) { 
     if (this == obj) 
      return true; 
     if (obj == null) 
      return false; 
     if (getClass() != obj.getClass()) 
      return false; 
     DisputeSummaryarraylistobject other = (DisputeSummaryarraylistobject) obj; 
     if (activeDisputes != other.activeDisputes) 
      return false; 
     if (chargeback != other.chargeback) 
      return false; 
     if (closedChargebacks != other.closedChargebacks) 
      return false; 
     if (closedInFavor != other.closedInFavor) 
      return false; 
     if (inProgress != other.inProgress) 
      return false; 
     if (recentUpdates != other.recentUpdates) 
      return false; 
     if (recentlyClosed != other.recentlyClosed) 
      return false; 
     if (responseRequired != other.responseRequired) 
      return false; 
     return true; 
    } 
    @Override 
    public String toString() { 
     return "DisputeSummaryarraylistobject [chargeback=" + chargeback 
       + ", activeDisputes=" + activeDisputes + ", recentUpdates=" 
       + recentUpdates + ", recentlyClosed=" + recentlyClosed 
       + ", responseRequired=" + responseRequired + ", inProgress=" 
       + inProgress + ", closedInFavor=" + closedInFavor 
       + ", closedChargebacks=" + closedChargebacks + "]"; 
    } 
} 
+0

嗨Syam,謝謝你的更新。它的工作很好,謝謝大家 – saravanakumar