JSONPath浅析

JSONPath浅析 在日常的项目开发中,我们常常会为了避免在代码中hardcoding而对某些参数进行配置化,进而提高开发效率和灵活性。而常用的数据结构就是JSON。而对配置的数据的获取的方式常常有以下几种方式:第一种:JSONPath:@TestpublicvoidtestJsonPath(){JSONObjectdata=JSONObject…

大家好,又见面了,我是你们的朋友全栈君。

 

在日常的项目开发中,我们常常会为了避免在代码中hard coding而对某些参数进行配置化,进而提高开发效率和灵活性。而常用的数据结构就是JSON。

而对配置的数据的获取的方式常常有以下几种方式:

第一种:JSONPath:

    @Test
    public void testJsonPath() {

        JSONObject data = JSONObject.parseObject(
                "{\"other\":[{\"music\":\"海王\",\"movie\":\"神奇女侠\"}],\"address\":\"中国最美丽的地方\",\"gender\":1,\"mobile\":\"9090980\",\"name\":\"张三\",\"age\":23}");

        System.out.println(JSONPath.paths(data));
        Object 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() {

        JSONObject data = JSONObject.parseObject(
                "{\"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.getJSONObject("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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149070.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 时间序列大数据平台建设经验谈

    时间序列大数据平台建设经验谈版权声明:本文由本人撰写并发表于2018年1月刊的《程序员》杂志,本文版权归《程序员》杂志所有,未经许可不得转载。引言在大数据的生态系统里,时间序列数据(TimeSeriesData,简称TSD)是很常见也是所占比例最大的一类数据,几乎出现在科学和工程的各个领域,一些常见的时间序列数据有:描述服务器运行状况的Metrics数据、各种IoT系统的终端数据、脑电图、汇率、股价、气象和天

    2022年6月11日
    30
  • Python 代码风格

    Python 代码风格

    2021年11月26日
    43
  • 进销存管理系统【源码开放】[通俗易懂]

    进销存管理系统【源码开放】[通俗易懂]进销存管理系统的功能需求:1,实现采购订单的持久化,对采购商品入库处理,还有就是采购的退货处理;2,实现商品的入库、出库操作,查询商品的库存信息,修改商品的仓库号3,实现销售订单的添加,销售发货处理,并且销售的退货处理4,实现新建员工培训信息和查询员工培训记录功能5,实现对商品、供应商、客户资料的管理,对员工用户的管理,最重要的是对系统数据的备份和恢复代码的截图如下所示:系统的截图如下所示:bean层manage的代码如下所示:packag.

    2022年5月31日
    29
  • Ubuntu卸载python(慎重)

    Ubuntu卸载python(慎重)Ubuntu卸载python(慎重)看到这篇博客你还有机会收手Ubuntu系统下不要轻易卸载系统自带的python(2.7、3.5),因为Ubuntu依赖python环境。惨痛经历:卸载python3.5(作死)sudoapt-getremovepython3.5 #卸载python3.5sudoapt-getremove…

    2022年5月30日
    65
  • python怎么用反三角函数_反三角函数怎么用

    展开全部已知:cosα32313133353236313431303231363533e4b893e5b19e31333366303132=3/5,求α。解:已知:cosα=3/5有:α=arccos(3/5)经查表(或按计算器),得:α≈53.13010235°,或:α≈323.13010235°考虑到三角函数的周期性,得:α≈360°×k+53.13010235°,或:α≈360°×k+323…

    2022年4月7日
    71
  • 分享ArcGis For Flex API 1.3 Diagram

    分享ArcGis For Flex API 1.3 Diagram

    2021年8月2日
    59

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号