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