zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    sql 中 列转换成拼音首字母简写【邹建版】
    取一个任意数所有 和的等式
    sql 汉字转全拼音(非首字母)
    实现消息来时让网页标题闪动
    hdoj 1754 I Hate It 线段树(二)
    nyoj 247 虚拟城市之旅 路径压缩
    hdoj 1247 字典树分词 strncpy函数
    hdoj 1671字典树水题之三 静态数组节约内存法
    sort函数
    hdoj 1166 排兵布阵 线段树()
  • 原文地址:https://www.cnblogs.com/-wenli/p/13993887.html
Copyright © 2011-2022 走看看