From f01f5cd00a064df806404f2d7943ce51b22a7b98 Mon Sep 17 00:00:00 2001
From: liuy <37787198+LiuyCodes@users.noreply.github.com>
Date: Tue, 1 Jul 2025 08:50:56 +0800
Subject: [PATCH] =?UTF-8?q?test(jolt):=20=E6=B7=BB=E5=8A=A0=20Jolt?=
=?UTF-8?q?=E6=A1=86=E6=9E=B6=E7=9B=B8=E5=85=B3=E6=B5=8B=E8=AF=95=E7=94=A8?=
=?UTF-8?q?=E4=BE=8B-=20=E6=96=B0=E5=A2=9E=E5=A4=9A=E4=B8=AA=E6=B5=8B?=
=?UTF-8?q?=E8=AF=95=E7=B1=BB=EF=BC=8C=E8=A6=86=E7=9B=96=20Jolt=20?=
=?UTF-8?q?=E6=A1=86=E6=9E=B6=E7=9A=84=E5=90=84=E7=A7=8D=E6=93=8D=E4=BD=9C?=
=?UTF-8?q?=EF=BC=9A=20=20=20-=20TestJoltCardinality:=20=E6=B5=8B=E8=AF=95?=
=?UTF-8?q?=20cardinality=20=E6=93=8D=E4=BD=9C=20=20-=20TestJoltDefault:?=
=?UTF-8?q?=E6=B5=8B=E8=AF=95=20default=20=E6=93=8D=E4=BD=9C=20=20=20-=20T?=
=?UTF-8?q?estJoltModify:=20=E6=B5=8B=E8=AF=95=20modify=E6=93=8D=E4=BD=9C?=
=?UTF-8?q?=20=20=20-=20TestJoltRemove:=20=E6=B5=8B=E8=AF=95=20remove=20?=
=?UTF-8?q?=E6=93=8D=E4=BD=9C=20-=20TestJoltShift:=20=E6=B5=8B=E8=AF=95=20?=
=?UTF-8?q?shift=20=E6=93=8D=E4=BD=9C=20=20=20-=20TestJoltSort:=20?=
=?UTF-8?q?=E6=B5=8B=E8=AF=95=20sort=20=E6=93=8D=E4=BD=9C=20-=20=E5=9C=A8?=
=?UTF-8?q?=20pom.xml=20=E4=B8=AD=E6=B7=BB=E5=8A=A0=20Jolt=20=E7=9B=B8?=
=?UTF-8?q?=E5=85=B3=E4=BE=9D=E8=B5=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
base-buildpackage/pom.xml | 10 +
.../hzya/frame/jolt/TestJoltCardinality.java | 51 ++++
.../com/hzya/frame/jolt/TestJoltDefault.java | 58 +++++
.../com/hzya/frame/jolt/TestJoltModify.java | 32 +++
.../com/hzya/frame/jolt/TestJoltRemove.java | 44 ++++
.../com/hzya/frame/jolt/TestJoltShift.java | 218 ++++++++++++++++++
.../com/hzya/frame/jolt/TestJoltSort.java | 35 +++
7 files changed, 448 insertions(+)
create mode 100644 base-buildpackage/src/test/java/com/hzya/frame/jolt/TestJoltCardinality.java
create mode 100644 base-buildpackage/src/test/java/com/hzya/frame/jolt/TestJoltDefault.java
create mode 100644 base-buildpackage/src/test/java/com/hzya/frame/jolt/TestJoltModify.java
create mode 100644 base-buildpackage/src/test/java/com/hzya/frame/jolt/TestJoltRemove.java
create mode 100644 base-buildpackage/src/test/java/com/hzya/frame/jolt/TestJoltShift.java
create mode 100644 base-buildpackage/src/test/java/com/hzya/frame/jolt/TestJoltSort.java
diff --git a/base-buildpackage/pom.xml b/base-buildpackage/pom.xml
index ed64e54a..60e0e147 100644
--- a/base-buildpackage/pom.xml
+++ b/base-buildpackage/pom.xml
@@ -24,6 +24,16 @@
0.0.1-SNAPSHOT
test
+
+ com.bazaarvoice.jolt
+ jolt-core
+ ${latest.jolt.version}
+
+
+ com.bazaarvoice.jolt
+ json-utils
+ ${latest.jolt.version}
+
diff --git a/base-buildpackage/src/test/java/com/hzya/frame/jolt/TestJoltCardinality.java b/base-buildpackage/src/test/java/com/hzya/frame/jolt/TestJoltCardinality.java
new file mode 100644
index 00000000..e10924a7
--- /dev/null
+++ b/base-buildpackage/src/test/java/com/hzya/frame/jolt/TestJoltCardinality.java
@@ -0,0 +1,51 @@
+package com.hzya.frame.jolt;
+
+import com.bazaarvoice.jolt.Chainr;
+import com.bazaarvoice.jolt.JsonUtils;
+import org.junit.Test;
+
+/**
+ * "cardinality"
+ *
+ * @Author:liuyang
+ * @Package:com.hzya.frame
+ * @Project:fw-nifi
+ * @name:TestJolt
+ * @Date:2025/6/18 11:19
+ * @Filename:TestJolt
+ */
+public class TestJoltCardinality {
+
+ private final String jsonFileRootRoute = "/Users/liuyang/workspaces/hzya/fw-nifi/jolt-demo";
+
+ /**
+ * ONE:如果输入值是一个列表,则获取该列表中的第一个元素,并将其设置为该元素的数据,不支持其他类型
+ */
+ @Test
+ public void testDemo() {
+ //输入json
+ Object input = JsonUtils.filepathToObject(jsonFileRootRoute + "/cardinality/input.json");
+ //spec
+ Object spec = JsonUtils.filepathToObject(jsonFileRootRoute + "/cardinality/spec.json");
+
+ Chainr chainr = Chainr.fromSpec(spec);
+ Object transform = chainr.transform(input);
+ System.out.println(JsonUtils.toJsonString(transform));
+ }
+
+ /**
+ * 'MANY':如果输入不是列表,则创建一个列表并将第一个元素设置为输入值
+ * 如果输入是"null",使它成为一个空列表。如果输入是一个列表,不支持
+ */
+ @Test
+ public void testDemo2() {
+ //输入json
+ Object input = JsonUtils.filepathToObject(jsonFileRootRoute + "/cardinality/input2.json");
+ //spec
+ Object spec = JsonUtils.filepathToObject(jsonFileRootRoute + "/cardinality/spec2.json");
+
+ Chainr chainr = Chainr.fromSpec(spec);
+ Object transform = chainr.transform(input);
+ System.out.println(JsonUtils.toJsonString(transform));
+ }
+}
\ No newline at end of file
diff --git a/base-buildpackage/src/test/java/com/hzya/frame/jolt/TestJoltDefault.java b/base-buildpackage/src/test/java/com/hzya/frame/jolt/TestJoltDefault.java
new file mode 100644
index 00000000..35d155b2
--- /dev/null
+++ b/base-buildpackage/src/test/java/com/hzya/frame/jolt/TestJoltDefault.java
@@ -0,0 +1,58 @@
+package com.hzya.frame.jolt;
+
+//import org.flywaydb.core.internal.util.JsonUtils;
+//import org.flywaydb.core.internal.util.JsonUtils;
+//import org.flywaydb.core.internal.util.JsonUtils;
+
+import com.bazaarvoice.jolt.Chainr;
+import com.bazaarvoice.jolt.JsonUtils;
+import org.junit.Test;
+
+//import java.util.List;
+
+/**
+ * jolt框架的default部分测试,
+ * default是一种为json对象设置默认值的核心操作,当目标json中某个字段不存在,或字段值为null时,
+ * 用你指定的默认值填充该字段,如果字段已存在且值非 null,则不会覆盖原有值
+ *
+ * @Author:liuyang
+ * @Package:com.hzya.frame
+ * @Project:fw-nifi
+ * @name:TestJolt
+ * @Date:2025/6/18 11:19
+ * @Filename:TestJolt
+ */
+public class TestJoltDefault {
+
+ private final String jsonFileRootRoute = "/Users/liuyang/workspaces/hzya/fw-nifi/jolt-demo";
+
+ /**
+ * 增加一些指定属性
+ */
+ @Test
+ public void testDemo() {
+ //输入json
+ Object input = JsonUtils.filepathToObject(jsonFileRootRoute + "/default/input.json");
+ //spec
+ Object spec = JsonUtils.filepathToObject(jsonFileRootRoute + "/default/spec.json");
+
+ Chainr chainr = Chainr.fromSpec(spec);
+ Object transform = chainr.transform(input);
+ System.out.println(JsonUtils.toJsonString(transform));
+ }
+
+ /**
+ * 增加一些指定属性
+ */
+ @Test
+ public void testDemo2() {
+ //输入json
+ Object input = JsonUtils.filepathToObject(jsonFileRootRoute + "/default/input3.json");
+ //spec
+ Object spec = JsonUtils.filepathToObject(jsonFileRootRoute + "/default/spec3.json");
+
+ Chainr chainr = Chainr.fromSpec(spec);
+ Object transform = chainr.transform(input);
+ System.out.println(JsonUtils.toJsonString(transform));
+ }
+}
\ No newline at end of file
diff --git a/base-buildpackage/src/test/java/com/hzya/frame/jolt/TestJoltModify.java b/base-buildpackage/src/test/java/com/hzya/frame/jolt/TestJoltModify.java
new file mode 100644
index 00000000..cdb22be3
--- /dev/null
+++ b/base-buildpackage/src/test/java/com/hzya/frame/jolt/TestJoltModify.java
@@ -0,0 +1,32 @@
+package com.hzya.frame.jolt;
+
+import com.bazaarvoice.jolt.Chainr;
+import com.bazaarvoice.jolt.JsonUtils;
+import org.junit.Test;
+
+/**
+ * jolt框架的modify部分测试
+ *
+ * @Author:liuyang
+ * @Package:com.hzya.frame
+ * @Project:fw-nifi
+ * @name:TestJolt
+ * @Date:2025/6/18 11:19
+ * @Filename:TestJolt
+ */
+public class TestJoltModify {
+
+ private final String jsonFileRootRoute = "/Users/liuyang/workspaces/hzya/fw-nifi/jolt-demo";
+
+ @Test
+ public void testDemo() {
+ //输入json
+ Object input = JsonUtils.filepathToObject(jsonFileRootRoute + "/modify/input.json");
+ //spec
+ Object spec = JsonUtils.filepathToObject(jsonFileRootRoute + "/modify/spec.json");
+
+ Chainr chainr = Chainr.fromSpec(spec);
+ Object transform = chainr.transform(input);
+ System.out.println(JsonUtils.toJsonString(transform));
+ }
+}
\ No newline at end of file
diff --git a/base-buildpackage/src/test/java/com/hzya/frame/jolt/TestJoltRemove.java b/base-buildpackage/src/test/java/com/hzya/frame/jolt/TestJoltRemove.java
new file mode 100644
index 00000000..3ba0e4bf
--- /dev/null
+++ b/base-buildpackage/src/test/java/com/hzya/frame/jolt/TestJoltRemove.java
@@ -0,0 +1,44 @@
+package com.hzya.frame.jolt;
+
+import com.bazaarvoice.jolt.Chainr;
+import com.bazaarvoice.jolt.JsonUtils;
+import org.junit.Test;
+
+/**
+ * "remove" 是一种用于从输入 JSON 中删除指定字段或元素的核心转换操作
+ *
+ * @Author:liuyang
+ * @Package:com.hzya.frame
+ * @Project:fw-nifi
+ * @name:TestJolt
+ * @Date:2025/6/18 11:19
+ * @Filename:TestJolt
+ */
+public class TestJoltRemove {
+
+ private final String jsonFileRootRoute = "/Users/liuyang/workspaces/hzya/fw-nifi/jolt-demo";
+
+ @Test
+ public void testDemo() {
+ //输入json
+ Object input = JsonUtils.filepathToObject(jsonFileRootRoute + "/remove/input.json");
+ //spec
+ Object spec = JsonUtils.filepathToObject(jsonFileRootRoute + "/remove/spec.json");
+
+ Chainr chainr = Chainr.fromSpec(spec);
+ Object transform = chainr.transform(input);
+ System.out.println(JsonUtils.toJsonString(transform));
+ }
+
+ @Test
+ public void testDemo2() {
+ //输入json
+ Object input = JsonUtils.filepathToObject(jsonFileRootRoute + "/remove/input3.json");
+ //spec
+ Object spec = JsonUtils.filepathToObject(jsonFileRootRoute + "/remove/spec3.json");
+
+ Chainr chainr = Chainr.fromSpec(spec);
+ Object transform = chainr.transform(input);
+ System.out.println(JsonUtils.toJsonString(transform));
+ }
+}
\ No newline at end of file
diff --git a/base-buildpackage/src/test/java/com/hzya/frame/jolt/TestJoltShift.java b/base-buildpackage/src/test/java/com/hzya/frame/jolt/TestJoltShift.java
new file mode 100644
index 00000000..2f20e331
--- /dev/null
+++ b/base-buildpackage/src/test/java/com/hzya/frame/jolt/TestJoltShift.java
@@ -0,0 +1,218 @@
+package com.hzya.frame.jolt;
+
+//import org.flywaydb.core.internal.util.JsonUtils;
+//import org.flywaydb.core.internal.util.JsonUtils;
+//import org.flywaydb.core.internal.util.JsonUtils;
+
+import com.bazaarvoice.jolt.Chainr;
+import com.bazaarvoice.jolt.JsonUtils;
+//import org.flywaydb.core.internal.util.JsonUtils;
+import org.junit.Test;
+
+//import java.util.List;
+
+/**
+ * jolt框架的shift部分测试,Shiftr的基本操作是复制输入JSON的value
+ *
+ * @Author:liuyang
+ * @Package:com.hzya.frame
+ * @Project:fw-nifi
+ * @name:TestJolt
+ * @Date:2025/6/18 11:19
+ * @Filename:TestJolt
+ */
+public class TestJoltShift {
+
+ private final String jsonFileRootRoute = "/Users/liuyang/workspaces/hzya/fw-nifi/jolt-demo";
+
+ @Test
+ public void testDemo() {
+ //输入json
+ Object input = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/input.json");
+ //spec
+ Object spec = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/spec.json");
+
+ Chainr chainr = Chainr.fromSpec(spec);
+ Object transform = chainr.transform(input);
+ System.out.println(JsonUtils.toJsonString(transform));
+ }
+
+ /**
+ * 字段映射符
+ */
+ @Test
+ public void testDemo2() {
+ Object input = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/input2.json");
+ Object spec = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/spec2.json");
+
+ Chainr chainr = Chainr.fromSpec(spec);
+ Object transform = chainr.transform(input);
+ System.out.println(JsonUtils.toJsonString(transform));
+ }
+
+ /**
+ * *通配符
+ */
+ @Test
+ public void testDemo3() {
+ Object input = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/input3.json");
+ Object spec = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/spec3.json");
+
+ Chainr chainr = Chainr.fromSpec(spec);
+ Object transform = chainr.transform(input);
+ System.out.println(JsonUtils.toJsonString(transform));
+ }
+
+ @Test
+ public void testDemo4() {
+ Object input = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/input4.json");
+ Object spec = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/spec4.json");
+
+ Chainr chainr = Chainr.fromSpec(spec);
+ Object transform = chainr.transform(input);
+ System.out.println(JsonUtils.toJsonString(transform));
+ }
+
+ /**
+ * &通配符
+ */
+ @Test
+ public void testDemo5() {
+ Object input = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/input5.json");
+ Object spec = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/spec5.json");
+
+ Chainr chainr = Chainr.fromSpec(spec);
+ Object transform = chainr.transform(input);
+ System.out.println(JsonUtils.toJsonString(transform));
+ }
+
+ /**
+ * $通配符
+ */
+ @Test
+ public void testDemo6() {
+ Object input = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/input6.json");
+ Object spec = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/spec6.json");
+
+ Chainr chainr = Chainr.fromSpec(spec);
+ Object transform = chainr.transform(input);
+ System.out.println(JsonUtils.toJsonString(transform));
+ }
+
+ /**
+ * #通配符,在右边
+ */
+ @Test
+ public void testDemo7() {
+ Object input = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/input7.json");
+ Object spec = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/spec7.json");
+
+ Chainr chainr = Chainr.fromSpec(spec);
+ Object transform = chainr.transform(input);
+ System.out.println(JsonUtils.toJsonString(transform));
+ }
+
+ /**
+ * #通配符,在左边
+ */
+ @Test
+ public void testDemo8() {
+ Object input = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/input8.json");
+ Object spec = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/spec8.json");
+
+ Chainr chainr = Chainr.fromSpec(spec);
+ Object transform = chainr.transform(input);
+ System.out.println(JsonUtils.toJsonString(transform));
+ }
+
+ /**
+ * | 通配符,在左边
+ */
+ @Test
+ public void testDemo9() {
+ Object input = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/input9.json");
+ Object spec = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/spec9.json");
+
+ Chainr chainr = Chainr.fromSpec(spec);
+ Object transform = chainr.transform(input);
+ System.out.println(JsonUtils.toJsonString(transform));
+ }
+
+ /**
+ * @通配符,在左边
+ */
+ @Test
+ public void testDemo10() {
+ Object input = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/input10.json");
+ Object spec = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/spec10.json");
+
+ Chainr chainr = Chainr.fromSpec(spec);
+ Object transform = chainr.transform(input);
+ System.out.println(JsonUtils.toJsonString(transform));
+ }
+
+ /**
+ * @通配符,在右边
+ */
+ @Test
+ public void testDemo11() {
+ Object input = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/input11.json");
+ Object spec = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/spec11.json");
+
+ Chainr chainr = Chainr.fromSpec(spec);
+ Object transform = chainr.transform(input);
+ System.out.println(JsonUtils.toJsonString(transform));
+ }
+
+ /**
+ * 处理输入中的json数组
+ */
+ @Test
+ public void testDemo12() {
+ Object input = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/input12.json");
+ Object spec = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/spec12.json");
+
+ Chainr chainr = Chainr.fromSpec(spec);
+ Object transform = chainr.transform(input);
+ System.out.println(JsonUtils.toJsonString(transform));
+ }
+
+ /**
+ * 处理输出的json数组
+ */
+ @Test
+ public void testDemo13() {
+ Object input = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/input13.json");
+ Object spec = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/spec13.json");
+
+ Chainr chainr = Chainr.fromSpec(spec);
+ Object transform = chainr.transform(input);
+ System.out.println(JsonUtils.toJsonString(transform));
+ }
+
+ /**
+ * 同一个输入源,可以输出到多个目标输出处
+ */
+ @Test
+ public void testDemo14() {
+ Object input = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/input14.json");
+ Object spec = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/spec14.json");
+
+ Chainr chainr = Chainr.fromSpec(spec);
+ Object transform = chainr.transform(input);
+ System.out.println(JsonUtils.toJsonString(transform));
+ }
+
+ /**
+ * 隐式数组
+ */
+ @Test
+ public void testDemo15() {
+ Object input = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/input15.json");
+ Object spec = JsonUtils.filepathToObject(jsonFileRootRoute + "/shift/spec15.json");
+
+ Chainr chainr = Chainr.fromSpec(spec);
+ Object transform = chainr.transform(input);
+ System.out.println(JsonUtils.toJsonString(transform));
+ }
+}
\ No newline at end of file
diff --git a/base-buildpackage/src/test/java/com/hzya/frame/jolt/TestJoltSort.java b/base-buildpackage/src/test/java/com/hzya/frame/jolt/TestJoltSort.java
new file mode 100644
index 00000000..f68ba76a
--- /dev/null
+++ b/base-buildpackage/src/test/java/com/hzya/frame/jolt/TestJoltSort.java
@@ -0,0 +1,35 @@
+package com.hzya.frame.jolt;
+
+import com.bazaarvoice.jolt.Chainr;
+import com.bazaarvoice.jolt.JsonUtils;
+import org.junit.Test;
+
+/**
+ * "Sort":排序场景
+ *
+ * @Author:liuyang
+ * @Package:com.hzya.frame
+ * @Project:fw-nifi
+ * @name:TestJolt
+ * @Date:2025/6/18 11:19
+ * @Filename:TestJolt
+ */
+public class TestJoltSort {
+
+ private final String jsonFileRootRoute = "/Users/liuyang/workspaces/hzya/fw-nifi/jolt-demo";
+
+ /**
+ * 默认按字母升序排列(A → Z),排序后键顺序为:a → b → d → r
+ */
+ @Test
+ public void testDemo() {
+ //输入json
+ Object input = JsonUtils.filepathToObject(jsonFileRootRoute + "/sort/input.json");
+ //spec
+ Object spec = JsonUtils.filepathToObject(jsonFileRootRoute + "/sort/spec.json");
+
+ Chainr chainr = Chainr.fromSpec(spec);
+ Object transform = chainr.transform(input);
+ System.out.println(JsonUtils.toJsonString(transform));
+ }
+}
\ No newline at end of file