diff --git a/Readme.md b/Readme.md
index 72680bf..2b397f3 100644
--- a/Readme.md
+++ b/Readme.md
@@ -20,7 +20,14 @@
- 高效的
- 精准定位差异
- 轻量级
-- 依赖非常干净,只依赖fastJson
+- 依赖非常干净,只依赖fastJson,fastjson2,gson,jackson其中之一
+
+目前支持功能
+
+ - [x] 支持json-path表示路径
+ - [x] 支持配置化比较行为。详情见下文
+ - [x] 支持拓展自定义比较器,用于满足特殊需求
+ - [x] 支持不同json框架选择。
@@ -39,9 +46,16 @@
${version}
+
+
+
+ cn.xiaoandcai
+ json-diff-impl-fastjson
+ ${version}
+
```
[版本查看](./VersionHistory.md)
-2024-04-11 最新版本:4.0.6-RC1-RELEASE
+2024-04-11 最新版本:4.1.1-RC1-RELEASE
```java
/**
@@ -99,10 +113,7 @@ public class UseExample {
工具提供了四个配置,来之对比过程中一些其他的要求。工具还在积极开发中,如果有新的需求,可以给作者提一个issuse。
-在开发中。很多时候对比配置一致。可以使用 `JsonDiffOption` 进行开启唯一配置。这样也将获取更好的性能;
-```java
-
-```
+在开发中。很多时候对比配置一致。可以使用 `JsonDiffOption` 进行开启唯一配置。这样也将获取更好的性能
### 3.进阶
diff --git a/json-diff-common/src/main/java/me/codeleep/jsondiff/common/model/TravelPath.java b/json-diff-common/src/main/java/me/codeleep/jsondiff/common/model/TravelPath.java
index 6e17058..d035b19 100644
--- a/json-diff-common/src/main/java/me/codeleep/jsondiff/common/model/TravelPath.java
+++ b/json-diff-common/src/main/java/me/codeleep/jsondiff/common/model/TravelPath.java
@@ -31,13 +31,13 @@ public TravelPath(TravelPath parentPath, MappingKey mappingKey) {
// 抽象的路径
this.abstractTravelPath = PathUtil.getObjectPath(parentPath.getAbstractTravelPath()) + (mappingKey.getExpectKey() != null ? mappingKey.getExpectKey() : mappingKey.getActualKey());
// 实际遍历的路径
- this.actualTravelPath = PathUtil.getObjectPath(parentPath.actualTravelPath) + mappingKey.getActualKey();
+ this.actualTravelPath = PathUtil.getObjectPath(parentPath.getActualTravelPath()) + mappingKey.getActualKey();
this.expectTravelPath = PathUtil.getObjectPath(parentPath.getExpectTravelPath()) + mappingKey.getExpectKey();
}
public TravelPath(TravelPath parentPath, int expectIndex, int actualIndex) {
// 抽象的路径
- this.abstractTravelPath = parentPath.getAbstractTravelPath() + PathUtil.getIndexPath("*");
+ this.abstractTravelPath = parentPath.getAbstractTravelPath() + PathUtil.getAbstractIndexPath(null);
// 实际遍历的路径
this.actualTravelPath = parentPath.getActualTravelPath() + PathUtil.getIndexPath(String.valueOf(actualIndex));
this.expectTravelPath = parentPath.getExpectTravelPath() + PathUtil.getIndexPath(String.valueOf(expectIndex));
diff --git a/json-diff-common/src/main/java/me/codeleep/jsondiff/common/utils/PathUtil.java b/json-diff-common/src/main/java/me/codeleep/jsondiff/common/utils/PathUtil.java
index 4996e5c..745e8db 100644
--- a/json-diff-common/src/main/java/me/codeleep/jsondiff/common/utils/PathUtil.java
+++ b/json-diff-common/src/main/java/me/codeleep/jsondiff/common/utils/PathUtil.java
@@ -14,12 +14,16 @@ public class PathUtil {
private static final String ARRAY_SING_RIGHT = "]";
+ public static String getAbstractIndexPath(String index) {
+ return ARRAY_SING_LEFT + "*" + ARRAY_SING_RIGHT;
+ }
+
public static String getIndexPath(String index) {
return ARRAY_SING_LEFT + index + ARRAY_SING_RIGHT;
}
public static String getObjectPath(String parentPath) {
- return parentPath.replaceAll("\\[\\d+]", "[*]") + OBJECT_SING;
+ return parentPath + OBJECT_SING;
}
}
diff --git a/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/AbstractHandleFactory.java b/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/AbstractHandleFactory.java
index 7119d82..3228351 100644
--- a/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/AbstractHandleFactory.java
+++ b/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/AbstractHandleFactory.java
@@ -18,20 +18,20 @@
*/
public class AbstractHandleFactory implements HandleFactory{
@Override
- public JsonNeat extends JsonDiff> generate(JsonDiff actual, JsonDiff expect, TravelPath travelPath) {
+ public JsonNeat extends JsonDiff> generate(JsonDiff expect, JsonDiff actual, TravelPath travelPath) {
if (!ClassUtil.isSameClass(expect, actual)) {
return null;
}
// TODO 返回系统默认处理器
if (expect instanceof JsonDiffObject && actual instanceof JsonDiffObject) {
- return new ComplexObjectJsonNeat(travelPath, actual, expect);
+ return new ComplexObjectJsonNeat(travelPath, expect, actual);
}
if (expect instanceof JsonDiffArray && actual instanceof JsonDiffArray) {
- return new ComplexArrayJsonNeat(travelPath, actual, expect);
+ return new ComplexArrayJsonNeat(travelPath, expect, actual);
}
if (expect.isLeaf() && actual.isLeaf()) {
- return new ComplexPrimitiveJsonNeat(travelPath, actual, expect);
+ return new ComplexPrimitiveJsonNeat(travelPath, expect, actual);
}
- return new ComplexOtherJsonNeat(travelPath, actual, expect);
+ return new ComplexOtherJsonNeat(travelPath, expect, actual);
}
}
diff --git a/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/HandleFactory.java b/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/HandleFactory.java
index 62b04fe..7447c0e 100644
--- a/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/HandleFactory.java
+++ b/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/HandleFactory.java
@@ -11,6 +11,6 @@
*/
public interface HandleFactory {
- JsonNeat extends JsonDiff> generate(JsonDiff actual, JsonDiff expect, TravelPath travelPath);
+ JsonNeat extends JsonDiff> generate(JsonDiff expect, JsonDiff actual, TravelPath travelPath);
}
diff --git a/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/array/AbstractArrayJsonNeat.java b/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/array/AbstractArrayJsonNeat.java
index b971d69..2deb442 100644
--- a/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/array/AbstractArrayJsonNeat.java
+++ b/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/array/AbstractArrayJsonNeat.java
@@ -19,9 +19,9 @@ public abstract class AbstractArrayJsonNeat extends Abs
protected final JsonDiffArray expect;
- protected AbstractArrayJsonNeat(TravelPath travelPath, JsonDiff actual, JsonDiff expect) {
+ protected AbstractArrayJsonNeat(TravelPath travelPath, JsonDiff expect, JsonDiff actual) {
super(travelPath);
- if (!(actual instanceof JsonDiffArray) || !(expect instanceof JsonDiffArray)) {
+ if (!(expect instanceof JsonDiffArray) || !(actual instanceof JsonDiffArray)) {
throw new IllegalArgumentException("Parameter type error, actual and expect must be JsonDiffArray");
}
this.actual = (JsonDiffArray) actual;
diff --git a/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/array/ComplexArrayJsonNeat.java b/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/array/ComplexArrayJsonNeat.java
index f6e2b01..b359f5d 100644
--- a/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/array/ComplexArrayJsonNeat.java
+++ b/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/array/ComplexArrayJsonNeat.java
@@ -19,8 +19,8 @@
*/
public class ComplexArrayJsonNeat extends AbstractArrayJsonNeat {
- public ComplexArrayJsonNeat(TravelPath travelPath, JsonDiff actual, JsonDiff expect) {
- super(travelPath, actual, expect);
+ public ComplexArrayJsonNeat(TravelPath travelPath, JsonDiff expect, JsonDiff actual) {
+ super(travelPath, expect, actual);
}
protected JsonCompareResult ignoreOrder(JsonDiffArray expect, JsonDiffArray actual) {
@@ -39,7 +39,7 @@ protected JsonCompareResult ignoreOrder(JsonDiffArray expect, JsonDiffArray actu
continue;
}
TravelPath nextTravelPath = new TravelPath(this.travelPath, expectIndex, actualIndex);
- JsonNeat extends JsonDiff> jsonNeat = RunTimeDataFactory.getOptionInstance().getJsonNeatFactory().generate(actual.get(actualIndex), expect.get(expectIndex), nextTravelPath);
+ JsonNeat extends JsonDiff> jsonNeat = RunTimeDataFactory.getOptionInstance().getJsonNeatFactory().generate( expect.get(expectIndex), actual.get(actualIndex), nextTravelPath);
if (jsonNeat == null) {
continue;
}
@@ -65,7 +65,7 @@ protected JsonCompareResult ignoreOrder(JsonDiffArray expect, JsonDiffArray actu
JsonDiff actualItem = actual.get(actualIndex);
TravelPath nextTravelPath = new TravelPath(this.travelPath, expectIndex, actualIndex);
// 判断类型, 根据类型去实例化JsonNeat。
- JsonNeat extends JsonDiff> jsonNeat = RunTimeDataFactory.getOptionInstance().getJsonNeatFactory().generate(actualItem, expectItem, nextTravelPath);
+ JsonNeat extends JsonDiff> jsonNeat = RunTimeDataFactory.getOptionInstance().getJsonNeatFactory().generate(expectItem, actualItem, nextTravelPath);
// 类型不一致
if (jsonNeat != null) {
JsonCompareResult diff = jsonNeat.diff();
@@ -93,7 +93,7 @@ protected JsonCompareResult keepOrder(JsonDiffArray expect, JsonDiffArray actual
JsonDiff actualItem = actual.get(i);
TravelPath nextTravelPath = new TravelPath(this.travelPath, i, i);
// 判断类型, 根据类型去实例化JsonNeat。
- JsonNeat extends JsonDiff> jsonNeat = RunTimeDataFactory.getOptionInstance().getJsonNeatFactory().generate(actualItem, expectItem, nextTravelPath);
+ JsonNeat extends JsonDiff> jsonNeat = RunTimeDataFactory.getOptionInstance().getJsonNeatFactory().generate(expectItem, actualItem, nextTravelPath);
// 类型不一致
if (jsonNeat == null) {
Defects defects = new Defects()
diff --git a/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/custom/AlignArrayJsonDiff.java b/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/custom/AlignArrayJsonDiff.java
index bde9fc0..83be0ad 100644
--- a/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/custom/AlignArrayJsonDiff.java
+++ b/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/custom/AlignArrayJsonDiff.java
@@ -14,8 +14,8 @@
*/
public class AlignArrayJsonDiff extends ComplexArrayJsonNeat {
- protected AlignArrayJsonDiff(TravelPath travelPath, JsonDiff actual, JsonDiff expect) {
- super(travelPath, actual, expect);
+ protected AlignArrayJsonDiff(TravelPath travelPath, JsonDiff expect, JsonDiff actual) {
+ super(travelPath, expect, actual);
}
@Override
diff --git a/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/object/AbstractObjectJsonNeat.java b/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/object/AbstractObjectJsonNeat.java
index fab0803..555540c 100644
--- a/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/object/AbstractObjectJsonNeat.java
+++ b/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/object/AbstractObjectJsonNeat.java
@@ -18,9 +18,9 @@ public abstract class AbstractObjectJsonNeat extends A
protected final JsonDiffObject expect;
- protected AbstractObjectJsonNeat(TravelPath travelPath, JsonDiff actual, JsonDiff expect) {
+ protected AbstractObjectJsonNeat(TravelPath travelPath, JsonDiff expect, JsonDiff actual) {
super(travelPath);
- if (!(actual instanceof JsonDiffObject) || !(expect instanceof JsonDiffObject)) {
+ if (!(expect instanceof JsonDiffObject) || !(actual instanceof JsonDiffObject)) {
throw new IllegalArgumentException("Parameter type error, actual and expect must be JsonDiffObject");
}
this.actual = (JsonDiffObject) actual;
diff --git a/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/object/ComplexObjectJsonNeat.java b/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/object/ComplexObjectJsonNeat.java
index aa557de..578f036 100644
--- a/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/object/ComplexObjectJsonNeat.java
+++ b/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/object/ComplexObjectJsonNeat.java
@@ -31,8 +31,8 @@ public class ComplexObjectJsonNeat extends AbstractObjectJsonNeat keyMap = new ArrayList<>();
- public ComplexObjectJsonNeat(TravelPath travelPath, JsonDiff actual, JsonDiff expect) {
- super(travelPath, actual, expect);
+ public ComplexObjectJsonNeat(TravelPath travelPath, JsonDiff expect, JsonDiff actual) {
+ super(travelPath, expect, actual);
}
/**
@@ -111,7 +111,7 @@ protected JsonCompareResult diff1() {
JsonDiff actualDiffJson = actual.get(mappingKey.getActualKey());
TravelPath nextTravelPath = new TravelPath(travelPath, mappingKey);
// 判断类型, 根据类型去实例化JsonNeat。
- JsonNeat extends JsonDiff> jsonNeat = RunTimeDataFactory.getOptionInstance().getJsonNeatFactory().generate(actualDiffJson, expectDiffJson, nextTravelPath);
+ JsonNeat extends JsonDiff> jsonNeat = RunTimeDataFactory.getOptionInstance().getJsonNeatFactory().generate(expectDiffJson, actualDiffJson, nextTravelPath);
if (jsonNeat == null) {
Defects defects = new Defects()
.setActual(actualDiffJson)
diff --git a/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/other/AbstractOtherJsonNeat.java b/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/other/AbstractOtherJsonNeat.java
index 8aa3f0f..6411511 100644
--- a/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/other/AbstractOtherJsonNeat.java
+++ b/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/other/AbstractOtherJsonNeat.java
@@ -20,9 +20,9 @@ public abstract class AbstractOtherJsonNeat extends Abs
protected final JsonDiffOther expect;
- protected AbstractOtherJsonNeat(TravelPath travelPath, JsonDiff actual, JsonDiff expect) {
+ protected AbstractOtherJsonNeat(TravelPath travelPath, JsonDiff expect, JsonDiff actual) {
super(travelPath);
- if (!(actual instanceof JsonDiffOther) || !(expect instanceof JsonDiffOther)) {
+ if (!(expect instanceof JsonDiffOther) || !(actual instanceof JsonDiffOther)) {
throw new IllegalArgumentException("Parameter type error, actual and expect must be JsonDiffOther");
}
this.actual = (JsonDiffOther) actual;
diff --git a/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/other/ComplexOtherJsonNeat.java b/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/other/ComplexOtherJsonNeat.java
index 075fbd5..d7621d0 100644
--- a/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/other/ComplexOtherJsonNeat.java
+++ b/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/other/ComplexOtherJsonNeat.java
@@ -17,8 +17,8 @@
*/
public class ComplexOtherJsonNeat extends AbstractOtherJsonNeat {
- public ComplexOtherJsonNeat(TravelPath travelPath, JsonDiff actual, JsonDiff expect) {
- super(travelPath, actual, expect);
+ public ComplexOtherJsonNeat(TravelPath travelPath, JsonDiff expect, JsonDiff actual) {
+ super(travelPath, expect, actual);
}
@Override
diff --git a/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/primitive/AbstractPrimitiveJsonNeat.java b/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/primitive/AbstractPrimitiveJsonNeat.java
index 0d09f49..3140e60 100644
--- a/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/primitive/AbstractPrimitiveJsonNeat.java
+++ b/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/primitive/AbstractPrimitiveJsonNeat.java
@@ -4,7 +4,6 @@
import me.codeleep.jsondiff.common.model.JsonCompareResult;
import me.codeleep.jsondiff.common.model.TravelPath;
import me.codeleep.jsondiff.common.model.neat.JsonDiff;
-import me.codeleep.jsondiff.common.model.neat.JsonDiffObject;
import me.codeleep.jsondiff.common.model.neat.JsonDiffPrimitive;
import me.codeleep.jsondiff.core.handle.AbstractJsonNeat;
@@ -19,9 +18,9 @@ public abstract class AbstractPrimitiveJsonNeat ext
protected final JsonDiffPrimitive expect;
- protected AbstractPrimitiveJsonNeat(TravelPath travelPath, JsonDiff actual, JsonDiff expect) {
+ protected AbstractPrimitiveJsonNeat(TravelPath travelPath, JsonDiff expect, JsonDiff actual) {
super(travelPath);
- if (!(actual instanceof JsonDiffPrimitive) || !(expect instanceof JsonDiffPrimitive)) {
+ if (!(expect instanceof JsonDiffPrimitive) || !(actual instanceof JsonDiffPrimitive)) {
throw new IllegalArgumentException("Parameter type error, actual and expect must be JsonDiffPrimitive");
}
this.actual = (JsonDiffPrimitive) actual;
diff --git a/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/primitive/ComplexPrimitiveJsonNeat.java b/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/primitive/ComplexPrimitiveJsonNeat.java
index 68f541d..8211421 100644
--- a/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/primitive/ComplexPrimitiveJsonNeat.java
+++ b/json-diff-core/src/main/java/me/codeleep/jsondiff/core/handle/primitive/ComplexPrimitiveJsonNeat.java
@@ -17,8 +17,8 @@
*/
public class ComplexPrimitiveJsonNeat extends AbstractPrimitiveJsonNeat {
- public ComplexPrimitiveJsonNeat(TravelPath travelPath, JsonDiff actual, JsonDiff expect) {
- super(travelPath, actual, expect);
+ public ComplexPrimitiveJsonNeat(TravelPath travelPath, JsonDiff expect, JsonDiff actual) {
+ super(travelPath, expect, actual);
}
@Override
diff --git a/json-diff-impl/json-diff-impl-fastjson/src/main/java/me/codeleep/jsondiff/impl/fastjson/FastJsonArray.java b/json-diff-impl/json-diff-impl-fastjson/src/main/java/me/codeleep/jsondiff/impl/fastjson/FastJsonArray.java
index b4a3b0d..67bef4d 100644
--- a/json-diff-impl/json-diff-impl-fastjson/src/main/java/me/codeleep/jsondiff/impl/fastjson/FastJsonArray.java
+++ b/json-diff-impl/json-diff-impl-fastjson/src/main/java/me/codeleep/jsondiff/impl/fastjson/FastJsonArray.java
@@ -1,9 +1,11 @@
package me.codeleep.jsondiff.impl.fastjson;
+import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import me.codeleep.jsondiff.common.model.neat.JsonDiff;
import me.codeleep.jsondiff.common.model.neat.JsonDiffArray;
+import java.util.ArrayList;
import java.util.Collection;
/**
@@ -47,7 +49,10 @@ public void addAll(Collection> c) {
@Override
public Object format() {
- return String.valueOf(jsonArray);
+ if (jsonArray == null) {
+ return null;
+ }
+ return jsonArray.toJSONString();
}
@Override
diff --git a/json-diff-impl/json-diff-impl-fastjson/src/main/java/me/codeleep/jsondiff/impl/fastjson/FastJsonObject.java b/json-diff-impl/json-diff-impl-fastjson/src/main/java/me/codeleep/jsondiff/impl/fastjson/FastJsonObject.java
index f857e27..4d71057 100644
--- a/json-diff-impl/json-diff-impl-fastjson/src/main/java/me/codeleep/jsondiff/impl/fastjson/FastJsonObject.java
+++ b/json-diff-impl/json-diff-impl-fastjson/src/main/java/me/codeleep/jsondiff/impl/fastjson/FastJsonObject.java
@@ -5,6 +5,8 @@
import me.codeleep.jsondiff.common.model.neat.JsonDiff;
import me.codeleep.jsondiff.common.model.neat.JsonDiffObject;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
@@ -39,7 +41,10 @@ public Set keySet() {
@Override
public Object format() {
- return JSON.toJSONString(jsonObject);
+ if (jsonObject == null) {
+ return null;
+ }
+ return jsonObject.toJSONString();
}
@Override
diff --git a/json-diff-impl/json-diff-impl-fastjson/src/main/java/me/codeleep/jsondiff/impl/fastjson/FastJsonOther.java b/json-diff-impl/json-diff-impl-fastjson/src/main/java/me/codeleep/jsondiff/impl/fastjson/FastJsonOther.java
index 8d5e62a..4c69b5a 100644
--- a/json-diff-impl/json-diff-impl-fastjson/src/main/java/me/codeleep/jsondiff/impl/fastjson/FastJsonOther.java
+++ b/json-diff-impl/json-diff-impl-fastjson/src/main/java/me/codeleep/jsondiff/impl/fastjson/FastJsonOther.java
@@ -34,6 +34,9 @@ public boolean isEquals(JsonDiffOther jsonDiffOther) {
@Override
public Object format() {
+ if (object == null || object instanceof String) {
+ return object;
+ }
return String.valueOf(object);
}
diff --git a/json-diff-impl/json-diff-impl-fastjson/src/main/java/me/codeleep/jsondiff/impl/fastjson/FastJsonPrimitive.java b/json-diff-impl/json-diff-impl-fastjson/src/main/java/me/codeleep/jsondiff/impl/fastjson/FastJsonPrimitive.java
index 5d87da7..86d8150 100644
--- a/json-diff-impl/json-diff-impl-fastjson/src/main/java/me/codeleep/jsondiff/impl/fastjson/FastJsonPrimitive.java
+++ b/json-diff-impl/json-diff-impl-fastjson/src/main/java/me/codeleep/jsondiff/impl/fastjson/FastJsonPrimitive.java
@@ -29,6 +29,9 @@ public boolean isEquals(JsonDiffPrimitive jsonDiffPrimitive) {
@Override
public Object format() {
+ if (object == null || object instanceof String) {
+ return object;
+ }
return String.valueOf(object);
}
diff --git a/json-diff-impl/json-diff-impl-fastjson2/src/main/java/me/codeleep/jsondiff/impl/fastjson2/FastJson2Array.java b/json-diff-impl/json-diff-impl-fastjson2/src/main/java/me/codeleep/jsondiff/impl/fastjson2/FastJson2Array.java
index 749c031..6d484de 100644
--- a/json-diff-impl/json-diff-impl-fastjson2/src/main/java/me/codeleep/jsondiff/impl/fastjson2/FastJson2Array.java
+++ b/json-diff-impl/json-diff-impl-fastjson2/src/main/java/me/codeleep/jsondiff/impl/fastjson2/FastJson2Array.java
@@ -49,7 +49,10 @@ public void addAll(Collection> c) {
@Override
public Object format() {
- return JSON.to(ArrayList.class, jsonArray);
+ if (jsonArray == null) {
+ return null;
+ }
+ return jsonArray.toJSONString();
}
@Override
diff --git a/json-diff-impl/json-diff-impl-fastjson2/src/main/java/me/codeleep/jsondiff/impl/fastjson2/FastJson2Object.java b/json-diff-impl/json-diff-impl-fastjson2/src/main/java/me/codeleep/jsondiff/impl/fastjson2/FastJson2Object.java
index 39a8a30..48c82bb 100644
--- a/json-diff-impl/json-diff-impl-fastjson2/src/main/java/me/codeleep/jsondiff/impl/fastjson2/FastJson2Object.java
+++ b/json-diff-impl/json-diff-impl-fastjson2/src/main/java/me/codeleep/jsondiff/impl/fastjson2/FastJson2Object.java
@@ -40,7 +40,10 @@ public Set keySet() {
@Override
public Object format() {
- return JSON.to(HashMap.class, jsonObject);
+ if (this.jsonObject == null) {
+ return null;
+ }
+ return jsonObject.toJSONString();
}
@Override
diff --git a/json-diff-impl/json-diff-impl-fastjson2/src/main/java/me/codeleep/jsondiff/impl/fastjson2/FastJson2Other.java b/json-diff-impl/json-diff-impl-fastjson2/src/main/java/me/codeleep/jsondiff/impl/fastjson2/FastJson2Other.java
index 81bba0e..59591db 100644
--- a/json-diff-impl/json-diff-impl-fastjson2/src/main/java/me/codeleep/jsondiff/impl/fastjson2/FastJson2Other.java
+++ b/json-diff-impl/json-diff-impl-fastjson2/src/main/java/me/codeleep/jsondiff/impl/fastjson2/FastJson2Other.java
@@ -35,6 +35,9 @@ public boolean isEquals(JsonDiffOther jsonDiffOther) {
@Override
public Object format() {
+ if (object == null || object instanceof String) {
+ return object;
+ }
return String.valueOf(object);
}
diff --git a/json-diff-impl/json-diff-impl-fastjson2/src/main/java/me/codeleep/jsondiff/impl/fastjson2/FastJson2Primitive.java b/json-diff-impl/json-diff-impl-fastjson2/src/main/java/me/codeleep/jsondiff/impl/fastjson2/FastJson2Primitive.java
index fc325a4..346491b 100644
--- a/json-diff-impl/json-diff-impl-fastjson2/src/main/java/me/codeleep/jsondiff/impl/fastjson2/FastJson2Primitive.java
+++ b/json-diff-impl/json-diff-impl-fastjson2/src/main/java/me/codeleep/jsondiff/impl/fastjson2/FastJson2Primitive.java
@@ -29,6 +29,9 @@ public boolean isEquals(JsonDiffPrimitive jsonDiffPrimitive) {
@Override
public Object format() {
+ if (object == null || object instanceof String) {
+ return object;
+ }
return String.valueOf(object);
}
diff --git a/json-diff-impl/json-diff-impl-gson/src/main/java/me/codeleep/jsondiff/impl/gson/GsonArray.java b/json-diff-impl/json-diff-impl-gson/src/main/java/me/codeleep/jsondiff/impl/gson/GsonArray.java
index 4eaadd1..4c90b6c 100644
--- a/json-diff-impl/json-diff-impl-gson/src/main/java/me/codeleep/jsondiff/impl/gson/GsonArray.java
+++ b/json-diff-impl/json-diff-impl-gson/src/main/java/me/codeleep/jsondiff/impl/gson/GsonArray.java
@@ -65,7 +65,10 @@ public void addAll(Collection> cs) {
@Override
public Object format() {
- return gson.fromJson(jsonArray, ArrayList.class);
+ if (jsonArray == null) {
+ return null;
+ }
+ return gson.toJson(jsonArray);
}
@Override
diff --git a/json-diff-impl/json-diff-impl-gson/src/main/java/me/codeleep/jsondiff/impl/gson/GsonObject.java b/json-diff-impl/json-diff-impl-gson/src/main/java/me/codeleep/jsondiff/impl/gson/GsonObject.java
index a9c4051..8f74604 100644
--- a/json-diff-impl/json-diff-impl-gson/src/main/java/me/codeleep/jsondiff/impl/gson/GsonObject.java
+++ b/json-diff-impl/json-diff-impl-gson/src/main/java/me/codeleep/jsondiff/impl/gson/GsonObject.java
@@ -54,7 +54,10 @@ public Set keySet() {
@Override
public Object format() {
- return gson.fromJson(jsonObject, HashMap.class);
+ if (jsonObject == null) {
+ return null;
+ }
+ return gson.toJson(jsonObject);
}
@Override
diff --git a/json-diff-impl/json-diff-impl-gson/src/main/java/me/codeleep/jsondiff/impl/gson/GsonOther.java b/json-diff-impl/json-diff-impl-gson/src/main/java/me/codeleep/jsondiff/impl/gson/GsonOther.java
index feeefc4..1492bb7 100644
--- a/json-diff-impl/json-diff-impl-gson/src/main/java/me/codeleep/jsondiff/impl/gson/GsonOther.java
+++ b/json-diff-impl/json-diff-impl-gson/src/main/java/me/codeleep/jsondiff/impl/gson/GsonOther.java
@@ -1,5 +1,6 @@
package me.codeleep.jsondiff.impl.gson;
+import com.google.gson.JsonPrimitive;
import me.codeleep.jsondiff.common.model.neat.JsonDiffOther;
/**
@@ -17,6 +18,12 @@ public GsonOther(Object object) {
@Override
public Object format() {
+ if (object == null || object instanceof String) {
+ return object;
+ }
+ if (object instanceof JsonPrimitive) {
+ return ((JsonPrimitive) object).getAsString();
+ }
return String.valueOf(object);
}
diff --git a/json-diff-impl/json-diff-impl-gson/src/main/java/me/codeleep/jsondiff/impl/gson/GsonPrimitive.java b/json-diff-impl/json-diff-impl-gson/src/main/java/me/codeleep/jsondiff/impl/gson/GsonPrimitive.java
index b029f18..fae883e 100644
--- a/json-diff-impl/json-diff-impl-gson/src/main/java/me/codeleep/jsondiff/impl/gson/GsonPrimitive.java
+++ b/json-diff-impl/json-diff-impl-gson/src/main/java/me/codeleep/jsondiff/impl/gson/GsonPrimitive.java
@@ -1,5 +1,6 @@
package me.codeleep.jsondiff.impl.gson;
+import com.google.gson.JsonPrimitive;
import me.codeleep.jsondiff.common.model.neat.JsonDiffPrimitive;
/**
@@ -17,6 +18,12 @@ public GsonPrimitive(Object object) {
@Override
public Object format() {
+ if (object == null || object instanceof String) {
+ return object;
+ }
+ if (object instanceof JsonPrimitive) {
+ return ((JsonPrimitive) object).getAsString();
+ }
return String.valueOf(object);
}
diff --git a/json-diff-impl/json-diff-impl-jackson/src/main/java/me/codeleep/jsondiff/impl/jackson/JacksonArray.java b/json-diff-impl/json-diff-impl-jackson/src/main/java/me/codeleep/jsondiff/impl/jackson/JacksonArray.java
index 0d28eee..987f64c 100644
--- a/json-diff-impl/json-diff-impl-jackson/src/main/java/me/codeleep/jsondiff/impl/jackson/JacksonArray.java
+++ b/json-diff-impl/json-diff-impl-jackson/src/main/java/me/codeleep/jsondiff/impl/jackson/JacksonArray.java
@@ -1,5 +1,6 @@
package me.codeleep.jsondiff.impl.jackson;
+import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
@@ -57,7 +58,14 @@ public void addAll(Collection> cs) {
@Override
public Object format() {
- return mapper.convertValue(jsonArray, ArrayList.class);
+ if (jsonArray == null) {
+ return null;
+ }
+ try {
+ return mapper.writeValueAsString(jsonArray);
+ } catch (JsonProcessingException e) {
+ return null;
+ }
}
@Override
diff --git a/json-diff-impl/json-diff-impl-jackson/src/main/java/me/codeleep/jsondiff/impl/jackson/JacksonObject.java b/json-diff-impl/json-diff-impl-jackson/src/main/java/me/codeleep/jsondiff/impl/jackson/JacksonObject.java
index 9e3b1c6..93f8d54 100644
--- a/json-diff-impl/json-diff-impl-jackson/src/main/java/me/codeleep/jsondiff/impl/jackson/JacksonObject.java
+++ b/json-diff-impl/json-diff-impl-jackson/src/main/java/me/codeleep/jsondiff/impl/jackson/JacksonObject.java
@@ -1,5 +1,6 @@
package me.codeleep.jsondiff.impl.jackson;
+import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import me.codeleep.jsondiff.common.model.neat.JsonDiff;
@@ -42,7 +43,14 @@ public Set keySet() {
@Override
public Object format() {
- return mapper.convertValue(jsonObject, HashMap.class);
+ if (jsonObject == null) {
+ return null;
+ }
+ try {
+ return mapper.writeValueAsString(jsonObject);
+ } catch (JsonProcessingException e) {
+ return null;
+ }
}
@Override
diff --git a/json-diff-impl/json-diff-impl-jackson/src/main/java/me/codeleep/jsondiff/impl/jackson/JacksonOther.java b/json-diff-impl/json-diff-impl-jackson/src/main/java/me/codeleep/jsondiff/impl/jackson/JacksonOther.java
index 01edda6..0232e56 100644
--- a/json-diff-impl/json-diff-impl-jackson/src/main/java/me/codeleep/jsondiff/impl/jackson/JacksonOther.java
+++ b/json-diff-impl/json-diff-impl-jackson/src/main/java/me/codeleep/jsondiff/impl/jackson/JacksonOther.java
@@ -1,5 +1,6 @@
package me.codeleep.jsondiff.impl.jackson;
+import com.fasterxml.jackson.databind.JsonNode;
import me.codeleep.jsondiff.common.model.neat.JsonDiffOther;
/**
@@ -17,6 +18,12 @@ public JacksonOther(Object object) {
@Override
public Object format() {
+ if (object == null || object instanceof String) {
+ return object;
+ }
+ if (object instanceof JsonNode) {
+ return ((JsonNode)this.object).asText();
+ }
return String.valueOf(object);
}
diff --git a/json-diff-impl/json-diff-impl-jackson/src/main/java/me/codeleep/jsondiff/impl/jackson/JacksonPrimitive.java b/json-diff-impl/json-diff-impl-jackson/src/main/java/me/codeleep/jsondiff/impl/jackson/JacksonPrimitive.java
index 9be72e6..d142501 100644
--- a/json-diff-impl/json-diff-impl-jackson/src/main/java/me/codeleep/jsondiff/impl/jackson/JacksonPrimitive.java
+++ b/json-diff-impl/json-diff-impl-jackson/src/main/java/me/codeleep/jsondiff/impl/jackson/JacksonPrimitive.java
@@ -1,5 +1,6 @@
package me.codeleep.jsondiff.impl.jackson;
+import com.fasterxml.jackson.databind.JsonNode;
import me.codeleep.jsondiff.common.model.neat.JsonDiffPrimitive;
/**
@@ -17,6 +18,12 @@ public JacksonPrimitive(Object object) {
@Override
public Object format() {
+ if (object == null || object instanceof String) {
+ return object;
+ }
+ if (object instanceof JsonNode) {
+ return ((JsonNode)this.object).asText();
+ }
return String.valueOf(object);
}
diff --git a/json-diff-impl/json-diff-impl-jackson/src/main/java/me/codeleep/jsondiff/impl/jackson/JacksonUtil.java b/json-diff-impl/json-diff-impl-jackson/src/main/java/me/codeleep/jsondiff/impl/jackson/JacksonUtil.java
index 4c67868..83b152c 100644
--- a/json-diff-impl/json-diff-impl-jackson/src/main/java/me/codeleep/jsondiff/impl/jackson/JacksonUtil.java
+++ b/json-diff-impl/json-diff-impl-jackson/src/main/java/me/codeleep/jsondiff/impl/jackson/JacksonUtil.java
@@ -18,7 +18,7 @@ public static JsonDiff formatJsonDiff(Object value) {
return new JacksonArray((ArrayNode) value);
}
if (isJackPrimitive(value)) {
- return new JacksonOther(value);
+ return new JacksonPrimitive(value);
}
return new JacksonOther(value);
}
diff --git a/json-diff-test/pom.xml b/json-diff-test/pom.xml
index 1707f61..1a81135 100644
--- a/json-diff-test/pom.xml
+++ b/json-diff-test/pom.xml
@@ -26,7 +26,7 @@
cn.xiaoandcai
- json-diff-impl-gson
+ json-diff-impl-jackson
${project.version}
compile
diff --git a/json-diff-test/src/main/java/me/codeleep/jsondiff/test/SimpleTest.java b/json-diff-test/src/main/java/me/codeleep/jsondiff/test/SimpleTest.java
new file mode 100644
index 0000000..0d7321d
--- /dev/null
+++ b/json-diff-test/src/main/java/me/codeleep/jsondiff/test/SimpleTest.java
@@ -0,0 +1,32 @@
+package me.codeleep.jsondiff.test;
+
+import com.alibaba.fastjson2.JSON;
+import me.codeleep.jsondiff.DefaultJsonDifference;
+import me.codeleep.jsondiff.common.model.JsonCompareResult;
+import me.codeleep.jsondiff.core.config.JsonComparedOption;
+import org.testng.annotations.Test;
+
+import java.util.HashSet;
+
+/**
+ * @author: codeleep
+ * @createTime: 2024/04/12 上午10:22
+ * @description:
+ */
+public class SimpleTest {
+
+ @Test
+ public void test1() {
+ String expect = "{\"name\":\"baron\",\"age\":12}";
+ String actual = "{\"name\":\"baron\"}";
+
+ HashSet ignorePath = new HashSet<>();
+ ignorePath.add("$.age");
+
+ JsonComparedOption jsonComparedOption = new JsonComparedOption().setIgnoreOrder(true).setIgnorePath(ignorePath);
+ JsonCompareResult jsonCompareResult = new DefaultJsonDifference()
+ .option(jsonComparedOption)
+ .detectDiff(expect, actual);
+ System.out.printf(JSON.toJSONString(jsonCompareResult));
+ }
+}