Skip to content

Commit d10d62d

Browse files
committed
feature(json): 支持多个json框架
1. 支持多个json框架
1 parent 4caea7b commit d10d62d

35 files changed

+619
-167
lines changed

json-diff-common/pom.xml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,6 @@
1818
</properties>
1919

2020
<dependencies>
21-
<dependency>
22-
<groupId>com.alibaba.fastjson2</groupId>
23-
<artifactId>fastjson2</artifactId>
24-
<version>2.0.7</version>
25-
</dependency>
2621
</dependencies>
2722

2823
</project>

json-diff-common/src/main/java/me/codeleep/jsondiff/common/model/neat/ArrayJsonNeat.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package me.codeleep.jsondiff.common.model.neat;
22

3-
import com.alibaba.fastjson2.JSONArray;
43
import me.codeleep.jsondiff.common.model.JsonCompareResult;
54

65
/**
@@ -16,12 +15,12 @@ public interface ArrayJsonNeat extends JsonNeat{
1615
* @param actual 实际的json对象
1716
* @return 返回比较结果
1817
*/
19-
JsonCompareResult detectDiff(JSONArray expect, JSONArray actual);
18+
JsonCompareResult detectDiff(JsonDiffArray expect, JsonDiffArray actual);
2019

2120
// 忽略顺序的比较
22-
JsonCompareResult ignoreOrder(JSONArray expect, JSONArray actual);
21+
JsonCompareResult ignoreOrder(JsonDiffArray expect, JsonDiffArray actual);
2322

2423
// 保持顺序比较
25-
JsonCompareResult keepOrder(JSONArray expect, JSONArray actual);
24+
JsonCompareResult keepOrder(JsonDiffArray expect, JsonDiffArray actual);
2625

2726
}

json-diff-impl/src/main/java/me/codeleep/jsondiff/impl/JsonDiff.java renamed to json-diff-common/src/main/java/me/codeleep/jsondiff/common/model/neat/JsonDiff.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package me.codeleep.jsondiff.impl;
1+
package me.codeleep.jsondiff.common.model.neat;
22

33
/**
44
* @author: codeleep

json-diff-impl/src/main/java/me/codeleep/jsondiff/impl/JsonDiffArray.java renamed to json-diff-common/src/main/java/me/codeleep/jsondiff/common/model/neat/JsonDiffArray.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
package me.codeleep.jsondiff.impl;
1+
package me.codeleep.jsondiff.common.model.neat;
2+
3+
import java.util.Collection;
24

35
/**
46
* @author: codeleep
@@ -22,4 +24,13 @@ public interface JsonDiffArray extends JsonDiff{
2224
*/
2325
Object get(int index);
2426

27+
/**
28+
* 添加元素
29+
* @param item 元素
30+
*/
31+
void add(Object item);
32+
33+
34+
void addAll(Collection<?> c);
35+
2536
}

json-diff-impl/src/main/java/me/codeleep/jsondiff/impl/JsonDiffObject.java renamed to json-diff-common/src/main/java/me/codeleep/jsondiff/common/model/neat/JsonDiffObject.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package me.codeleep.jsondiff.impl;
1+
package me.codeleep.jsondiff.common.model.neat;
22

33
import java.util.Set;
44

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package me.codeleep.jsondiff.common.model.neat;
22

3-
import com.alibaba.fastjson2.JSONArray;
4-
import com.alibaba.fastjson2.JSONObject;
53
import me.codeleep.jsondiff.common.model.JsonCompareResult;
64
import me.codeleep.jsondiff.common.model.TravelPath;
75

@@ -11,8 +9,8 @@
119
* @description:
1210
*/
1311
public interface JsonNeat {
14-
JsonCompareResult diff(JSONArray expect, JSONArray actual, TravelPath travelPath);
15-
JsonCompareResult diff(JSONObject expect, JSONObject actual, TravelPath travelPath);
12+
JsonCompareResult diff(JsonDiffArray expect, JsonDiffArray actual, TravelPath travelPath);
13+
JsonCompareResult diff(JsonDiffObject expect, JsonDiffObject actual, TravelPath travelPath);
1614
JsonCompareResult diff(Object expect, Object actual, TravelPath travelPath);
1715

1816
}

json-diff-common/src/main/java/me/codeleep/jsondiff/common/model/neat/ObjectJsonNeat.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package me.codeleep.jsondiff.common.model.neat;
22

3-
import com.alibaba.fastjson2.JSONObject;
43
import me.codeleep.jsondiff.common.model.JsonCompareResult;
54

65
/**
@@ -17,6 +16,6 @@ public interface ObjectJsonNeat extends JsonNeat{
1716
* @return 返回比较结果
1817
* @throws IllegalAccessException 发生异常直接抛出
1918
*/
20-
JsonCompareResult detectDiff(JSONObject expect, JSONObject actual);
19+
JsonCompareResult detectDiff(JsonDiffObject expect, JsonDiffObject actual);
2120

2221
}

json-diff-core/src/main/java/me/codeleep/jsondiff/core/DefaultJsonDifference.java

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
package me.codeleep.jsondiff.core;
22

3-
import com.alibaba.fastjson2.JSONArray;
4-
import com.alibaba.fastjson2.JSONObject;
3+
import me.codeleep.jsondiff.common.exception.JsonDiffException;
54
import me.codeleep.jsondiff.common.model.JsonCompareResult;
65
import me.codeleep.jsondiff.common.model.JsonComparedOption;
76
import me.codeleep.jsondiff.common.model.TravelPath;
7+
import me.codeleep.jsondiff.common.model.neat.JsonDiff;
8+
import me.codeleep.jsondiff.common.model.neat.JsonNeat;
9+
import me.codeleep.jsondiff.core.utils.JsonDiffUtil;
810
import me.codeleep.jsondiff.core.utils.RunTimeDataFactory;
9-
import me.codeleep.jsondiff.core.handle.array.ComplexArrayJsonNeat;
10-
import me.codeleep.jsondiff.core.handle.object.ComplexObjectJsonNeat;
11+
import me.codeleep.jsondiff.core.utils.JsonDiffBuilder;
1112

1213
import static me.codeleep.jsondiff.common.model.Constant.PATH_ROOT;
1314

@@ -18,14 +19,17 @@
1819
*/
1920
public class DefaultJsonDifference {
2021

21-
public JsonCompareResult detectDiff(JSONObject expect, JSONObject actual) {
22-
JsonCompareResult result = new ComplexObjectJsonNeat().diff(expect, actual, new TravelPath(PATH_ROOT));
23-
RunTimeDataFactory.clearOptionInstance();
24-
return result;
25-
}
22+
public JsonCompareResult detectDiff(String expect, String actual) {
23+
JsonDiff expectJson = JsonDiffBuilder.buildObject(expect);
24+
JsonDiff actualJson = JsonDiffBuilder.buildObject(actual);
2625

27-
public JsonCompareResult detectDiff(JSONArray expect, JSONArray actual) {
28-
JsonCompareResult result = new ComplexArrayJsonNeat().diff(expect, actual, new TravelPath(PATH_ROOT));
26+
TravelPath travelPath = new TravelPath(PATH_ROOT);
27+
JsonNeat jsonNeat = JsonDiffUtil.getJsonNeat(expectJson, actualJson, travelPath);
28+
if (jsonNeat == null) {
29+
throw new JsonDiffException("无法找到适配比较器");
30+
}
31+
JsonCompareResult result = jsonNeat.diff(expectJson, actualJson, travelPath);
32+
// 清除设置
2933
RunTimeDataFactory.clearOptionInstance();
3034
return result;
3135
}

json-diff-core/src/main/java/me/codeleep/jsondiff/core/config/JsonDiffConfig.java

Lines changed: 0 additions & 28 deletions
This file was deleted.

json-diff-core/src/main/java/me/codeleep/jsondiff/core/config/JsonDiffOption.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import me.codeleep.jsondiff.common.model.JsonComparedOption;
44
import me.codeleep.jsondiff.core.utils.JsonNeatFactory;
5+
import me.codeleep.jsondiff.impl.ImplType;
56

67
/**
78
* @author: codeleep
@@ -20,6 +21,11 @@ public class JsonDiffOption {
2021
*/
2122
private static boolean uniqueOption = false;
2223

24+
/**
25+
* 默认的json框架
26+
*/
27+
private static ImplType defaultJsonFramework = ImplType.detectJsonParser();
28+
2329
/**
2430
* 默认的比较器工厂
2531
*/
@@ -52,4 +58,15 @@ public static void openUniqueOption() {
5258
public static void closeUniqueOption() {
5359
JsonDiffOption.uniqueOption = false;
5460
}
61+
62+
public static void setDefaultJsonFramework(ImplType implType) {
63+
if (implType == null) {
64+
return;
65+
}
66+
defaultJsonFramework = implType;
67+
}
68+
69+
public static ImplType getDefaultJsonFramework() {
70+
return defaultJsonFramework;
71+
}
5572
}

0 commit comments

Comments
 (0)