一.jsonpath:用来解析json数据

2.python处理json格式数据用到的函数

python json属性 python的jsonpath_json

案例:

import json

lt = [
    {'name': '王大明', 'age': '6'},
    {'name': '王二明', 'age': '5'},
    {'name': '王三明', 'age': '4'},
    {'name': '王四明', 'age': '3'},
    {'name': '王五明', 'age': '2'},
]
string = json.dumps(lt)
print(string)

python json属性 python的jsonpath_json格式_02

python json属性 python的jsonpath_json

案例:

import json

lt = [
    {'name': '王大明', 'age': '6'},
    {'name': '王二明', 'age': '5'},
    {'name': '王三明', 'age': '4'},
    {'name': '王四明', 'age': '3'},
    {'name': '王五明', 'age': '2'},
]
string = json.dumps(lt)
obj = json.loads(string)
print(obj)

python json属性 python的jsonpath_json_04

python json属性 python的jsonpath_json

案例:

import json

lt = [
    {'name': '王大明', 'age': '6'},
    {'name': '王二明', 'age': '5'},
    {'name': '王三明', 'age': '4'},
    {'name': '王四明', 'age': '3'},
    {'name': '王五明', 'age': '2'},
]
json.dump(lt, open('json.txt', 'w', encoding='utf8'))

python json属性 python的jsonpath_json_06


python json属性 python的jsonpath_python json属性_07

python json属性 python的jsonpath_json

实例:

import json

lt = [
    {'name': '王大明', 'age': '6'},
    {'name': '王二明', 'age': '5'},
    {'name': '王三明', 'age': '4'},
    {'name': '王四明', 'age': '3'},
    {'name': '王五明', 'age': '2'},
]
obj = json.load(open('json.txt', 'r', encoding='utf8'))
print(obj)

python json属性 python的jsonpath_json格式_09

3.前端处理

将json格式的字符串,转化为js对象

python json属性 python的jsonpath_json JSON.parse(‘json格式字符串’)
python json属性 python的jsonpath_json

4.jsonpath学习

python json属性 python的jsonpath_json (1)JSONPath工具的问题

     ~~~~~      - 依赖某种特定的语言


     ~~~~~      - 需要依赖XPath 1.0


     ~~~~~      - 减少代码量和内存的消耗


     ~~~~~      - 在运行时


(2)JSONPath表达式

JSONPath 是参照,xpath表达式来解析xml文档的方式,json数据结构通常是匿名的并且不一定需要有根元素。JSONPaht 用一个抽象的名字$来表示最外层对象。

JOSNPath 表达式可以使用 . 符号如下:

$.store.book[0].title

或者使用[] 符号

$['store']['book'][0]['title']

从输入路径来看。内部或者输出的路径都会转化成-符号。
JSONPath 允许使用通配符 * 表示所以的子元素名和数组索引。还允许使用 ‘…’ 从E4X参照过来的和数组切分语法[start🔚step]是从ECMASCRIPT 4 参照过来的。
表达式在下面的脚本语言中可以使用显示的名称或者索引:

$.store.book[(@.length-1)].title

使用’@'符号表示当前的对象,?(<判断表达式>) 使用逻辑表达式来过滤。

$.store.book[?(@.price < 10)].title
python json属性 python的jsonpath_json

常用对比:

xpath

jsonpath

Description

/

$

表示根元素

.

@

当前元素

/

.

子元素

//

. .

任意位置查找

*

*

通配符

[]

?()

应用过滤表达式

python json属性 python的jsonpath_json_14


XPath还有很多的语法(本地路径,操作符,和函数)没有列在这里。只要知道xpath和jsonpath脚本之中的不同点就行了。

  1. []在xpath表达式总是从前面的路径来操作数组,索引是从1开始。
  2. 使用JOSNPath的[]操作符操作一个对象或者数组,索引是从0开始。

5.案例

(1) 案例一:book中的所有的book作者

  • 导入jsonpath模块

python json属性 python的jsonpath_python json属性_15


python json属性 python的jsonpath_python json属性_16


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 json属性 python的jsonpath_字符串_17


**(2)案例二:**查找book下所有author

import jsonpath
import json

# 将json格式字符串转化为python对象
obj = json.load(open('bookstore.json', 'r', encoding='utf8'))

# 查找book下所有author
ret = jsonpath.jsonpath(obj, '$..author')
print(ret)

python json属性 python的jsonpath_json_18


**(3)案例三:**查找store下所有节点

import jsonpath
import json

# 将json格式字符串转化为python对象
obj = json.load(open('bookstore.json', 'r', encoding='utf8'))

# 查找store下所有节点
ret = jsonpath.jsonpath(obj, '$.store.*')
print(ret)

python json属性 python的jsonpath_json_19