嘘~ 正在从服务器偷取页面 . . .

JSONPATH


JSONPATH 学习

  1. 终究还是学了这个…..
  2. 一开始我是拒绝的..
  3. 直到我看到一坨 JSON
  4. 而我要一层层的找到内部的数据
  5. 在 Python 中找错了一堆红….

json_data = {
    'key': '666',
    "sites": [
        {"name": "百度", "url": "www.baidu.com"},
        {"name": "360", "url": "www.360.com"},
        {"name": 'Google', 'list': [
            {'url': 'https://www.google.com'},
        ]}

    ],
    "test": {
        'key': '777',
        'key1': '1',
        'key2': '2',
        'key3': '3',
        "key_list1": [1, 2, 3, 4],
        "key_list2": [1, 2, 3, 4],
    }
}

以下操作都基于上面的 json


  • 获取根节点所有数据:$.*
    • $ 代表根节点
    • . 是当前节点
    • * 通配符
    • 获取到的是 sites 和 test 内部的数据,不包含外部标签
  • 获取 test 节点下数据:$.test
  • 其他就一直…操作下去就好了,下面多一点别的操作

  • 遍历所有节点,获取名字为 key 的节点值:$..key
    • 获取所有数据:$..*
  • 获取 sites 列表中,所有的 name:$.sites[*].name or $.sites..name
  • 获取 sites 中所有的 url:$.sites..url
  • 获取 sites 中第三字典信息:$.sites[2]
  • 获取 sites 中前两个信息:$.sites[0:2]
    • 注意再使用分组的时候,目标需要是一个列表,废话…
    • 在 Python 中如果想获取最后一个,不能写 [-1] 需要加一个 : - [-1:]
  • 获取最后一个列表信息:$.sites[-1:]

  • 找到所有节点中包含 url 的:$..*[?(@.url)]
  • 找所有节点中,name 是 360 的节点:$..*[?(@.name==360)]
    • 这里要注意,如果在 json 中,节点是字符串,那么表达式也要是字符串
    • 如果是数字,就要是数字,外面不能有引号
    • 等于号需要有两个…

  • 找到一个列表中指定的一个:$..ip[(@.length-2)]

    • 其中length返回的是前面ip的长度
    • -2代表列表长度-2,结果作为索引进行取值。
  • 找到列表中age小于 100 的节点:$..*[?(@.age < 1000)]

    • 注意:这里的 age 节点存储数据需要是 数字类型
  • and操作,匹配同时有两个属性的节点:$..*[?(@.age and @.name)]

    • and&& 都可以。
    • 试了一下or,好像没用。
  • in操作:匹配指定节点属性,存在于列表中:$..*[?(@.age in ['777','888',999])]

    • 区分 数字 字符串

  • 在官网看到还可以正则表达式,各种通配符,在 Python 好像有一些不适用

  • 比如正则,大小,如果后期学到再补充。。。

  • 简简单单的学一下,对你有巨大帮助


文章作者: 林木木
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 林木木 !
评论
  目录