zoukankan      html  css  js  c++  java
  • 强大的Json解析工具 Jsonpath 实战教程

    jsonpath

    XML的优点是提供了大量的工具来分析、转换和有选择地从XML文档中提取数据。Xpath是这些功能强大的工具之一。

    对于JSON数据来说,也出现了jsonpath这样的工具来解决这些问题:

    • 数据可以通过交互方式从客户端上的JSON结构提取,不需要特殊的脚本。
    • 客户端请求的JSON数据可以减少到服务器的上的相关部分,从而大幅度减少服务器响应的带宽使用。

    jsonpath表达式始终引用JSON结构的方式与Xpath表达式与XML文档使用的方式相同。

    jsonpath的安装方法

    pip install jsonpath

    jsonpath与Xpath

    下面表格是jsonpath语法与Xpath的完整概述和比较。

    Xpathjsonpath概述
    / $ 根节点
    . @ 当前节点
    / .or[] 取子节点
    * * 匹配所有节点
    [] [] 迭代器标识(如数组下标,根据内容选值)
    // ... 不管在任何位置,选取符合条件的节点
    n/a [,] 支持迭代器中多选
    n/a ?() 支持过滤操作
    n/a () 支持表达式计算

    下面我们就通过几个示例来学习jsonxpath的使用方法。

    我们先来看下面这段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
        }
      }
    }

    获取符合条件的节点

    假如我需要获取到作者的名称该怎么样写呢?

    如果通过Python的字典方法来获取是非常麻烦的,所以在这里我们可以选择使用jsonpath.。

    具体代码示例如下所示:

    import jsonpath


    author = jsonpath.jsonpath(data_json, '$.store.book[*].author')
    print(author)

    运行上面的代码你会发现,成功的获取到了所有的作者名称,并保存在列表中。

    或者还可以这样写:

    import jsonpath

    author = jsonpath.jsonpath(data_json, '$..author')
    print(author)

    ['Nigel Rees', 'Evelyn Waugh', 'Herman Melville', 'J. R. R. Tolkien']

     

    使用指定索引

    还是使用上面的json数据,假如我现在需要获取第三本书的价格。

    third_book_price = jsonpath.jsonpath(data_json, '$.store.book[2].price')
    print(third_book_price)

    [8.99]

     

    运行上面的代码,你会发现成功的获取到了第三本书的价格。

    使用过滤器

    isbn_book = jsonpath.jsonpath(data_json, '$..book[?(@.isbn)]')
    print(isbn_book)
    print(type(isbn_book))

    [{'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', 'isb
    n': '0-395-19395-8', 'price': 22.99}]

    <class 'list'>

     

    通过运行上面的代码,你会发现,成功的将含有isbn编号的书籍过滤出来了。

    同样的道理,根据上面的例子,我们也可以将价格小于10元的书过滤出来。

    book = jsonpath.jsonpath(data_json, '$..book[?(@.price<10)]')
    print(book)
    print(type(book))

    [{'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}]
    <class 'list'>

    通过运行上面的代码,你会发现这里已经成功的将价格小于10元的书提取出来了。

    jsonpath其实是非常适合用来获取json格式的数据的一款工具,最重要的是这款工具轻量简单容使用。

  • 相关阅读:
    JavaScript 的定时(Timing )事件——setTimeout()与setInterval()
    HTML5+CSS3制作无限滚动与文字跳动效果
    动画属性与过渡属性与渐变属性(全)
    JavaScript 数组2—关联数组
    JavaScript 数组1—索引数组
    什么是JavaScript循环结构?
    JavaScript分支结构Ⅱ—switch-case
    JavaScript分支结构Ⅰ—IF-ELSE
    JavaScript 正则表达式——预定义类,边界,量词,贪婪模式,非贪婪模式,分组,前瞻
    SEO搜索引擎优化是什么?
  • 原文地址:https://www.cnblogs.com/kcxg/p/14888212.html
Copyright © 2011-2022 走看看