• json解析库jsonpath


     

    jsonpath

     jsonpath 用于多层嵌套 json格式的 解析。

    pip install jsonpath
    JsonPath描述
    $ 根节点
    @ 现行节点
    .or[] 取子节点
    n/a 取父节点,jsonpath为支持
    .. 就是不管位置,选择所有复合条件的条件
    * 匹配所有元素节点
    n/a 根据属性访问,json不支持,因为json是个key-value递归结构,不需要数属性访问
    [] 迭代器标示(可以在里边做简单的迭代操作,如数组下标,根据内容选值等)
    [,] 支持迭代器中做多选
    ?() 支持过滤操作
    () 支持表达式计算
    n/a 分组,JsonPath不支持

    jsonpath使用示例

    book_dict = { 
      "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
        }
      }
    }
    
    JsonPathResult
    $.store.book[*].author store中的所有的book作者
    $…author 所有的作者
    $.store.* store下的所有元素
    $.store…price store中的所有价钱
    $…book[2] 第三本书
    $…book[(@.length-1)] 最后一本书
    $…book[0,1] 取前两本书
    $…book[?(@.isbn)] 获取有jsbn的所有数
    $…book[?(@.price<10)] 获取价格大于10
    $…* 匹配所有数据

    使用示例

    $ 是查找的根节点,传参数是python的dict 类型,当查找到的时候返回一个list结果,查找失败的时候返回 False.

    import jsonpath
    
    result = {
        "code": 0,
        "data": [
            {
                "age": 20,
                "create_time": "2019-09-15",
                "id": 1,
                "mail": "283340479@qq.com",
                "name": "yoyo",
                "sex": "M"
            },
            {
                "age": 21,
                "create_time": "2019-09-16",
                "id": 2,
                "mail": "123445@qq.com",
                "name": "yoyo111",
                "sex": "M"
            }
        ],
        "msg": "success!"
    }
    
    msg = jsonpath.jsonpath(result, '$.msg')
    print(msg)   # 输出结果 ['success!']
    names = jsonpath.jsonpath(result, '$..name')
    print(names)   # 输出结果 ['yoyo', 'yoyo111']
    no = jsonpath.jsonpath(result, '$..yoyo')
    print(no)   # 找不到是结果是 False
  • 相关阅读:
    京东商城Java岗4面面经分享,(3轮技术+HR面已拿offer)
    选中input框禁止键盘弹出
    熟练使用artTemplate.helper()方法
    HTTP标头“Vary:Accept-Encoding”指定方法及其重要性分析
    浏览器缓存系列之三:设置浏览器缓存
    浏览器缓存系列之二:实战
    浏览器缓存系列之一
    使用递归算法实现树菜单
    为什么要用Docker
    高中生也能读懂的Docker入门教程
  • 原文地址:https://www.cnblogs.com/-wenli/p/13993887.html
Copyright © 2020-2023  润新知