美文网首页
JSONPath入门及测试

JSONPath入门及测试

作者: Richalll | 来源:发表于2021-10-09 18:31 被阅读0次

    JSONPath入门

    JSONPath - 是xpath在json的应用,是参照xpath表达式来解析XML文档的方式。JSONPath用'$'来表示最外层对象

    XPath的表达式:

    /store/book[1]/title

    x.store.book[0].title

    x['store']['book'][0]['title']

    JSONPath的表达式:

    $.store.book[0].title

    $['store']['book'][0]['title']

    JSONPath可以使用通配符*表示所有的子元素名和数组索引,使用'@'来表示当前对象,?(<判断表达式>)使用逻辑表达式来过滤。

    eg: $.store.book[?(@.price<10)].title

    XPath和JSONPath的不同点:

    · []在xpath表达式总是从前面的路径来操作数组,索引是从1开始。

    · 使用JSONPath的[]操作符操作一个对象或数组,索引是从0开始。

    XPathJSONPathDescription

    /$表示根元素

    .@ 当前元素

    /. or []子元素

    ..n/a父元素

    //..递归下降,JSONPath是从E4X借鉴的。

    **通配符,表示所有的元素

    @n/a 属性访问字符

    [][]子元素操作符

    |[,]连接操作符在XPath 结果合并其它结点集合。JSONP允许name或者数组索引。

    n/a[start:end:step]数组分割操作从ES4借鉴。

    []?()应用过滤表示式

    n/a()脚本表达式,使用在脚本引擎下面。

    ()n/aXpath分组

    eg:

    {

    "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

    }

    XPath                                                      JSONPath

    //*                                                              $..*                                 所有元素

    //book[isbn]                                         $..book[?(@.isbn)]              过滤出所有的包含isbn的书

    //book[price<10]                                 $..book[?(@.price<10)]       过滤出价格低于10的书

    //book[3]                                              $..book[2]                           第三个书

    //book[last()]                                        $..book[(@.length-1)]         最后一本书

    //author                                               $..author                             所有的作者

    /store/*                                                $.store.*                              store 的所有元素

    /store/book/author                             $.store.book[*].author        所有书的作者

    //book[position()<3]                           $..book[0,1]/$..book[:2]      前面的两本书

    1、author=Evelyn Waugh

    $..book[1].author

    2、color = red

    $..bicycle.color

    3、expensive = 10

    $.expensive

    4、获取"author":"J.R.R.Tolkien"的price

    $..book[?(@.author=='J. R. R. Tolkien')].price

    创建maven项目测试一下:

    1、POM里导入:

    <!-- jsonpath jar包 -->

    <groupId>com.jayway.jsonpath

    <artifactId>json-path

    <version>2.4.0

    <groupId>org.apache.commons

    <artifactId>commons-io

    <version>1.3.2

    <groupId>org.slf4j

    <artifactId>slf4j-nop

    <version>1.7.2

    </dependencies>

    2、将上面例子中的json保存为json文件放到resources

    3、执行如下代码:

    import com.jayway.jsonpath.JsonPath;

    import org.apache.commons.io.FileUtils;

    import java.io.File;

    import java.io.IOException;

    import java.util.List;

    public class jspath {

    public static void main(String[] args)throws IOException {

    File file =new File(jspath.class.getClassLoader().getResource("a.json").getPath());

    String json = FileUtils.readFileToString(file);

    List authors = JsonPath.read(json, "$..bicycle[?(@.color=='red')]"); // 修改JSONPath的内容测试结果是否一致

    System.out.println(authors);

    }

    }

    相关文章

      网友评论

          本文标题:JSONPath入门及测试

          本文链接:https://www.haomeiwen.com/subject/weaqoltx.html