• JSONPath入门之Snack3篇


    Snack3 for java

    一个微型JSON框架

    基于jdk8,60kb。有序列化反序列化、解析和转换、支持 Json path 查询。

    <dependency>
      <groupId>org.noear</groupId>
      <artifactId>snack3</artifactId>
      <version>3.1.5.9</version>
    </dependency>
    

    Snack3 借签了 Javascript 所有变量由 var 申明,及 Xml dom 一切都是 Node 的设计。其下一切数据都以ONode表示,ONode也即 One node 之意,代表任何类型,也可以转换为任何类型。

    • 强调文档树的操控和构建能力
    • 做为中间媒体,方便不同格式互转
    • 高性能Json path查询(兼容性和性能很赞)
    • 支持序列化、反序列化

    今天用它来试一下JSONPath入门

    一、JSONPath语法介绍

    • 字符串使用单引号,例:['name']
    • 过滤操作用空隔号隔开,例:[?(@.type == 1)]
    支持操作 说明
    $ 表示根元素
    @ 当前节点(做为过滤表达式的谓词使用)
    * 通用配配符,可以表示一个名字或数字。
    .. 深层扫描。 可以理解为递归搜索。
    .<name> 表示一个子节点
    ['<name>' (, '<name>')] 表示一个或多个子节点
    [<number> (, <number>)] 表示一个或多个数组下标(负号为倒数)
    [start:end] 数组片段,区间为[start,end),不包含end(负号为倒数)
    [?(<expression>)] 过滤表达式。 表达式结果必须是一个布尔值。
    支持过滤操作符 说明
    == left等于right(注意1不等于'1')
    != 不等于
    < 小于
    <= 小于等于
    > 大于
    >= 大于等于
    =~ 匹配正则表达式[?(@.name =~ /foo.*?/i)]
    in 左边存在于右边 [?(@.size in ['S', 'M'])]
    nin 左边不存在于右边
    支持尾部函数 说明
    min() 计算数字数组的最小值
    max() 计算数字数组的最大值
    avg() 计算数字数组的平均值
    sum() 计算数字数组的汇总值(新加的)

    二、准备JSON数据

    {
    	"store": {
    		"book": [{
    			"category": "reference",
    			"author": "Nigel Rees",
    			"title": "Sayings of the Century",
    			"price": 8.95
    		}, {
    			"category": "fiction",
    			"author": "Evelyn Waugh",
    			"title": "Sword of Honour",
    			"price": 12.99
    		}, {
    			"category": "fiction",
    			"author": "Herman Melville",
    			"title": "Moby Dick",
    			"isbn": "0-553-21311-3",
    			"price": 8.99
    		}, {
    			"category": "fiction",
    			"author": "J. R. R. Tolkien",
    			"title": "The Lord of the Rings",
    			"isbn": "0-395-19395-8",
    			"price": 22.99
    		}],
    		"bicycle": {
    			"color": "red",
    			"price": 19.95
    		}
    	},
    	"expensive": 10
    }
    

    三、演示代码

    @Test
    public void demo1(){
        final String json = "{"store":{"book":[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99}],"bicycle":{"color":"red","price":19.95}},"expensive":10}";
    
        ONode n = ONode.load(json);
    
        ONode t1 = n.select("$.store.book [0].title");
        System.out.println("
    t1:" + t1);
    
        ONode t2 = n.select("$['store']['book'][0]['title']");
        System.out.println("
    t2:" + t2);
    
        ONode t3 = n.select("$.store.book[*].author");
        System.out.println("
    t3:" + t3);
    
        ONode t4 = n.select("$..author");
        System.out.println("
    t4:" + t4);
    
        ONode t5 = n.select("$.store.*");
        System.out.println("
    t5:" + t5);
    
        ONode t6 = n.select("$.store..price");
        System.out.println("
    t6:" + t6);
    
        ONode t7 = n.select("$..book[2]");
        System.out.println("
    t7:" + t7);
    
        ONode t8 =  n.select("$..book[-2]");
        System.out.println("
    t8:" + t8);
    
        ONode t9 = n.select("$..book[0,1]");
        System.out.println("
    t9:" + t9);
    
        ONode ta = n.select("$..book[:2]");
        System.out.println("
    ta:" + ta);
    
        ONode tb = n.select("$..book[1:2]");
        System.out.println("
    tb:" + tb);
    
        ONode tc = n.select("$..book[-2:]");
        System.out.println("
    tc:" + tc);
    
        ONode td = n.select("$..book[2:]");
        System.out.println("
    td:" + td);
    
        ONode te = n.select("$..book[?(@.isbn)]");
        System.out.println("
    te:" + te);
    
        ONode tf = n.select("$.store.book[?(@.price < 10)]");
        System.out.println("
    tf:" + tf);
    
        ONode tg = n.select("$..book[?(@.author =~ /.*REES/i)]");
        System.out.println("
    tg:" + tg);
    
        ONode th = n.select("$..*");
        System.out.println("
    th:" + th);
    
        ONode ti = n.select("$..book[?(@.price <= $.expensive)]");
        System.out.println("
    ti:" + ti);
    }
    

    四、控制台输出

    t1:"Sayings of the Century"
    
    t2:"Sayings of the Century"
    
    t3:["Nigel Rees","Evelyn Waugh","Herman Melville","J. R. R. Tolkien"]
    
    t4:["Nigel Rees","Evelyn Waugh","Herman Melville","J. R. R. Tolkien"]
    
    t5:[[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99}],{"color":"red","price":19.95}]
    
    t6:[8.95,12.99,8.99,22.99,19.95]
    
    t7:[{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99}]
    
    t8:[{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99}]
    
    t9:[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99}]
    
    ta:[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99}]
    
    tb:[{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99}]
    
    tc:[{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99}]
    
    td:[{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99}]
    
    te:[{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99}]
    
    tf:[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99}]
    
    tg:[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95}]
    
    th:[{"book":[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99}],"bicycle":{"color":"red","price":19.95}},[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99}],{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},"reference","Nigel Rees","Sayings of the Century",8.95,{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99},"fiction","Evelyn Waugh","Sword of Honour",12.99,{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},"fiction","Herman Melville","Moby Dick","0-553-21311-3",8.99,{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99},"fiction","J. R. R. Tolkien","The Lord of the Rings","0-395-19395-8",22.99,{"color":"red","price":19.95},"red",19.95,10]
    
    ti:[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99}]
    
  • 相关阅读:
    select count(*) as total from(select count(*) from tab_cb_casim group by `card_no`) as cai;
    GROUP BY关键字与WITH ROLLUP一起使用
    用HTML5播放IPCamera视频
    三,ESP8266 SPI(基于Lua脚本语言)
    二,ESP8266 GPIO和SPI和定时器和串口(基于Lua脚本语言)
    一,ESP8266下载和刷固件(基于Lua脚本语言)
    AT24C02使用详解
    C#上位机串口控制12864显示
    关于STM32 IAP
    2-LPC1778之GPIO
  • 原文地址:https://www.cnblogs.com/noear/p/11959040.html
Copyright © 2020-2023  润新知