JSON 是一種輕量級的數據交換格式,常用于前端和后端的數據傳輸。當我們需要比對兩個 JSON 數據是否相同的時候,可以使用一些開源的庫來實現。
比較常用的兩個庫分別是 JSONassert 和 JSONDiff,下面分別介紹一下這兩個庫的使用方法。
JSONassert
JSONassert 可以比較兩個 JSON 數據是否完全相同,如果兩個 JSON 數據不完全相同,會拋出 AssertionFailedError 異常來提示錯誤。使用該庫的方法如下:
import org.skyscreamer.jsonassert.JSONAssert; // 第一個參數為預期的 JSON 數據,第二個參數為實際得到的 JSON 數據, // 第三個參數為 strict 模式,設置為 true 時會比對屬性值和類型,為 false 時只比對屬性值。 JSONAssert.assertEquals(expectedJson, actualJson, true);
JSONDiff
JSONDiff 可以比較兩個 JSON 數據的差異,并以樹形結構的形式展示出來,使得我們更容易地發現兩個 JSON 數據的差異。使用該庫的方法如下:
import com.fasterxml.jackson.databind.ObjectMapper; import com.github.wnameless.json.flattener.JsonFlattener; import io.github.jonestimd.json.diff.JsonDiff; // 將 JSON 數據扁平化,方便比對。 String expectedFlat = JsonFlattener.flatten(expectedJson); String actualFlat = JsonFlattener.flatten(actualJson); // 將扁平化后的 JSON 數據轉成 Map,方便比對。 ObjectMapper mapper = new ObjectMapper(); MapexpectedMap = mapper.readValue(expectedFlat, Map.class); Map actualMap = mapper.readValue(actualFlat, Map.class); // 比對兩個 Map 的差異。 JsonDiff.asJson(expectedMap, actualMap);
兩個庫的使用方法都十分簡單,開發者可以根據自己的需求選擇合適的庫來使用。