前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JSONPath浅析

JSONPath浅析

作者头像
全栈程序员站长
发布2022-07-04 10:14:34
2590
发布2022-07-04 10:14:34
举报
文章被收录于专栏:全栈程序员必看

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

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

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

第一种:JSONPath:

代码语言:javascript
复制
    @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("神奇女侠"));

    }

打印路径结果:

代码语言:javascript
复制
{/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非常强大。

第二种:手动处理法

代码语言:javascript
复制
    @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.cn/149070.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档