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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 使用LayUI操作数据表格「建议收藏」

    使用LayUI操作数据表格「建议收藏」接着 上一篇 继续完善我们的demo,这次我们加一个搜索按钮搜索源代码地址点我在table标签的上方,加入这样一组html<divclass="demo

  • 创建Google网站地图Sitemap.xml建议收藏

    Sitemap.xml是google搞出来的,也就是网站地图,不过这个网站地图是用xml写的,而且要按google的标准来写,并且要将写出来的这个文件sitemap.xml上传到自己的服务器空间中去。

    2021年12月20日
  • pytchram企业版的激活码【在线注册码/序列号/破解码】

    pytchram企业版的激活码【在线注册码/序列号/破解码】,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • leetcode–差分数组

    leetcode–差分数组0.差分数组的概念:常用于某个区间值都需加/减去a的问题。1.1094拼车classSolution:defcarPooling(self,trips:List[List[int]],capacity:int)->bool:max_val=0foriinrange(len(trips)):max_val=max(max_val,trips[i][2])diff=[0

  • soapUI工具使用方法、简介、接口测试[通俗易懂]

    soapUI工具使用方法、简介、接口测试[通俗易懂]一、soapUI简介SOAP:   WebService通过Http协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息头的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了标准的RPC方法来调用WebService。 SOAP协议 =HTTP协议 +XML数

  • compound extremes_one是什么

    compound extremes_one是什么前言eXtremeComponents是一系列提供高级显示的开源JSP定制标签。当前的包含的组件为eXtremeTable,用于以表的形式显示数据。本文档处于更新中。大部分章节我将仅仅描述如何使用eXtremeTable。当然,为了使程序高效并具有更高的灵活性,源代码被再三重构。随后,我认为阐述一下如何做设计决定是值得的。我希望大家能知道使用extremeTable是多么容易,并且

发表回复

您的电子邮箱地址不会被公开。

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