在日常的项目开发中,我们常常会为了避免在代码中hard coding而对某些参数进行配置化,进而提高开发效率和灵活性。而常用的数据结构就是JSON。
而对配置的数据的获取的方式常常有以下几种方式:
第一种:JSONPath:
@Test
public void testJsonPath() {
JSON data = JSON .parse (
\"{\\\"other\\\":[{\\\"music\\\":\\\"海王\\\",\\\"movie\\\":\\\"神奇女侠\\\"}],\\\"address\\\":\\\"中国最美丽的地方\\\",\\\"gender\\\":1,\\\"mobile\\\":\\\"9090980\\\",\\\"name\\\":\\\"张三\\\",\\\"age\\\":23}\");
System.out.println(JSONPath.paths(data));
name = JSONPath.eval(data, \"$.name\");
Assert.assertTrue(\"张三\".equals(name));
List<String> movie = (List<String>) JSONPath.eval(data, \"$.other.movie\");
Assert.assertTrue(movie.contains(\"神奇女侠\"));
}
打印路径结果:
{/name=张三, /other/0={\"music\":\"海王\",\"movie\":\"神奇女侠\"}, /age=23, /other=[{\"music\":\"海王\",\"movie\":\"神奇女侠\"}], /other/0/music=海王, /gender=1, /address=中国最美丽的地方, /mobile=9090980, /={\"other\":[{\"music\":\"海王\",\"movie\":\"神奇女侠\"}],\"address\":\"中国最美丽的地方\",\"gender\":1,\"mobile\":\"9090980\",\"name\":\"张三\",\"age\":23}, /other/0/movie=神奇女侠}
打印的结果中有一个地方非常特殊:
/other/0={\"music\":\"海王\",\"movie\":\"神奇女侠\"},这个json的配置其实是有些不合理的,但是最后仍然解析出来了。足以见得fastJson非常强大。
第二种:手动处理法
@Test
public void testJsonPath() {
JSON data = JSON .parse (
\"{\\\"other\\\":{\\\"music\\\":\\\"海王\\\",\\\"movie\\\":\\\"神奇女侠\\\"},\\\"address\\\":\\\"中国最美丽的地方\\\",\\\"gender\\\":1,\\\"mobile\\\":\\\"9090980\\\",\\\"name\\\":\\\"张三\\\",\\\"age\\\":23}\");
String name = data.getString(\"name\");
Assert.assertTrue(\"张三\".equals(name));
String music = Optional.ofNullable(data.getJSON (\"other\")).map(e -> e.getString(\"music\")).orElse(null);
Assert.assertTrue(\"海王\".equals(music));
}
- 总结:
通过简单的例子,我们可以发现通过JSONPath可以非常便捷的从JSON中获取我们想要的字段的值。远比在代码中hard coding来的优雅和灵活的多。同时,通过配置我们的获取路径也可以非常方便的做个一个可配置的选项。
- 应用场景
1、在平时的配置化开发中可以将我们系统的一些业务配置等信息以JSON的形式存放在数据库中,在需要的时候按需解析即可。可以大幅度的减少在项目中的硬编码。
2、在一些规则场景如风控、规则引擎、或者配置的系统中可以使用到。直接中JSON中获取变量,进行规则运算。当 事件满足某些场景是触发相应的动作。
- 写在最后
对JSONPath做了支持的库:
1、fastJson
2、JsonPath
继续阅读与本文标签相同的文章
-
Kubernetes 入门必备云原生发展简史
2026-05-19栏目: 教程
-
Java B2B2C多用户商城 springcloud架构(一)
2026-05-19栏目: 教程
-
这些逼真的人像,真不知道是怎么画出这种质感的,佩服!
2026-05-19栏目: 教程
-
Python脚本bug或致上百篇论文出错
2026-05-19栏目: 教程
-
裂变方案:三大驱动力让用户主动分享裂变
2026-05-19栏目: 教程
