JsonPath用法详解

打印 上一主题 下一主题

主题 790|帖子 790|积分 2370

JSONPath是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括Javascript、Python、PHP和Java。
1、JSONPath安装:

  1. pip install jsonpath
  2. # 如果安装太慢可以使用清华源来加速安装
  3. pip install jsonpath -i https://pypi.tuna.tsinghua.edu.cn/simple
复制代码
2、JSONPath语法

JSONPath语法和XPATH语法对比 JSON布局清晰,可读性高,复杂度低,非常轻易匹配。
JSONPath的语法与Xpath类似,如下表所示为JSONPath与XPath语法对比。
JSONPath语法它利用点号(.)和方括号([])来访问JSON对象的属性和数组元素
 

   

  • $:根节点,也是所有jsonpath表达式的开始
  • .:访问属性,表示获取子节点
  • ..: 表示获取所有符合条件的内容
  • []:访问数组元素,表示迭代器的标示(可以用于处置惩罚下标等情况)
  • [,] :表示多个结果的选择
  • *:通配符,匹配任何属性或数组元素,代表所有的元素节点
  • @:当前节点
  • ?():表示过滤操作
  • $.property:访问JSON对象的属性值。例如,$表示JSON根对象,$.name表示根对象的name属性值
  • $[index]:访问JSON数组的元素值。例如,$[0]表示数组的第一个元素。
  • $.property[index]:访问JSON对象中的数组元素。例如,$.students[0]表示对象的students属性中的第一个元素。
  • $.property
  • :访问JSON对象中的所有数组元素。例如,$.students
  • 表示对象的students属性中的所有元素。
  • $.property.*:访问JSON对象中的所有子属性。例如,$.student.*表示对象的student属性中的所有子属性。
  • $.property1.property2:访问JSON对象中的嵌套属性。例如,$.student.name表示对象的student属性中的name属性值。
  下面利用一个JSON文档演示JSONPath的具体利用。JSON 文档的内容如下:
  1. import jsonpath
  2. bookJson={
  3.  "store":{
  4.    "book":[
  5.      {
  6.        "category":"reference",
  7.        "author":"Nigel Rees",
  8.        "title":"Sayings of the Century",
  9.        "price":8.95
  10.      },
  11.      {
  12.        "category":"fiction",
  13.        "author":"J. R. R. Tolkien",
  14.        "title":"The Lord of the Rings",
  15.        "isbn":"0-395-19395-8",
  16.        "price":22.99
  17.      }
  18.    ],
  19.    "bicycle":{
  20.      "color":"red",
  21.      "price":19.95
  22.    }
  23.   }
  24. }
复制代码
  1. [/code] (1)检察store下的bicycle的color属性:
  2. [code]checkurl = "$.store.bicycle.color"
  3. data=jsonpath.jsonpath(bookJson, checkurl)
  4. print(data)
复制代码
  1. [/code] [code]['red']
  2. Process finished with exit code 0
复制代码
(2)输出book节点中包含的所有对象:
  1. checkurl = "$.store.book[*]"
  2. data=jsonpath.jsonpath(bookJson, checkurl)
  3. print(data)
复制代码
  1. [
  2.   {'category': 'reference',
  3.  'author': 'Nigel Rees',
  4.  'title': 'Sayings of the Century',
  5.  'price': 8.95
  6. },
  7. {'category': 'fiction',
  8.  'author': 'J. R. R. Tolkien',
  9.  'title': 'The Lord of the Rings',
  10.  'isbn': '0-395-19395-8',
  11.  'price': 22.99
  12. }
  13. ]
  14. Process finished with exit code 0
复制代码

(3)输出book节点的第一个对象:
  1. checkurl ="$.store.book[0]"
  2. data=jsonpath.jsonpath(bookJson, checkurl)
  3. print(data)
复制代码
  1. [
  2. {
  3.  'category': 'reference',
  4.  'author': 'Nigel Rees',
  5.  'title': 'Sayings of the Century',
  6.  'price': 8.95
  7. }
  8. ]
  9. Process finished with exit code 0
复制代码

(4)输出book节点中所有对象对应的属性title值:
  1. checkurl ="$.store.book[*].title"
  2. data=jsonpath.jsonpath(bookJson, checkurl)
  3. print(data)
复制代码
  1. ['Sayings of the Century', 'The Lord of the Rings']
  2. Process finished with exit code 0
复制代码

(5)输出book节点中category为fiction的所有对象:
  1. checkurl = "$.store.book[?(@.category=='fiction')]"
  2. data=jsonpath.jsonpath(bookJson, checkurl)
  3. print(data)
复制代码
  1. [
  2. {
  3.  'category': 'fiction',
  4.  'author': 'J. R. R. Tolkien',
  5.  'title': 'The Lord of the Rings',
  6.  'isbn': '0-395-19395-8',
  7.  'price': 22.99
  8. }
  9. ]
  10. Process finished with exit code 0
复制代码
(6)输出book节点中所有价格小于10的对象:
  1. checkurl = "$.store.book[?(@.price<10)]"
  2. data=jsonpath.jsonpath(bookJson, checkurl)
  3. print(data)
复制代码
  1. [
  2. {
  3.  'category': 'reference',
  4.  'author': 'Nigel Rees',
  5.  'title': 'Sayings of the Century',
  6.  'price': 8.95
  7. }
  8. ]
  9. Process finished with exit code 0
复制代码
(7)输出book节点中所有含有isbn的对象:
  1. checkurl = "$.store.book[?(@.isbn)]"
  2. data=jsonpath.jsonpath(bookJson, checkurl)
  3. print(data)
复制代码
  1. [
  2. {
  3.  'category': 'fiction',
  4.  'author': 'J. R. R. Tolkien',
  5.  'title': 'The Lord of the Rings',
  6.  'isbn': '0-395-19395-8',
  7.  'price': 22.99
  8. }
  9. ]
  10. Process finished with exit code 0
复制代码

3、JSONPATH的过滤器

   JSONPATH还支持利用过滤器来对JSON数据进行更精细的查询和过滤。过滤器利用方括号([])中的表达式来指定要过滤的条件。下面是一些常见的过滤器:
  

  • ==:便是
  • !=:不便是
  • <:小于
  • <=:小于或便是
  • >:大于
  • >=:大于或便是
  • =~:正则表达式匹配
  • !~:不匹配正则表达式
  示例:
  1. checkurl = "$.store.book[?(@.price<10)]"
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81428

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表