Cuando aprenda este artefacto de extracción de datos de Python, esté listo para la promoción

1. ¿Qué es jsonpath?

● JsonPath es una biblioteca de clase de extracción de información y una herramienta para extraer información específica de documentos JSON. Proporciona versiones en varios idiomas, incluidos JavaScript, Python, PHP y Java.

*Al final del artículo, recibe 10 excelentes cursos de automatización*

2. Características

● Solo puede extraer datos en formato JSON.

● El tipo de datos extraído es consistente con el tipo de datos original

3. Instalación

pip instalar jsonpath

4. Personajes originales comunes

personaje original

describir

ps

Representa el elemento raíz.

@

elemento actual

. o []

elemento hijo

..

Búsqueda recursiva (independientemente de la ruta actual, busque datos elegibles)

*

Comodín, lo que significa todos los elementos

[]

operador de elemento hijo

[,]

Admite selecciones múltiples en el iterador, las claves múltiples están separadas por comas

[inicio:fin:paso]

Operación de división de matriz, equivalente a rebanada

?()

aplicar expresión de filtro

Cinco, el uso de metacaracteres comunes

● datos de prueba

class_info = {"class_one": {
   
       "students": [        {"name": "张一",         "sex": "男",         "age": 18,         "height": 170.5         },        {"name": "张二",         "sex": "女",         "age": 20,         "height": 160.5         },        {"name": "张三",         "sex": "男",         "age": 18,         "height": 170.5         },    ],    "teacher": {
   
           "name": "李小二",        "sex": "男",        "age": 30,        "height": 185.5,        "teacher":"递归搜索测试"    }}}

● $: elemento raíz

import jsonpath#获取根元素下所有数据,2种写法一样#.的作用等同于[]表示子元素result = jsonpath.jsonpath(class_info, '$.*')result2 = jsonpath.jsonpath(class_info, '$[*]')print(result)print(result2)输出:[{'students': [{'name': '张一', 'sex': '男', 'age': 18, 'height': 170.5}, {'name': '张二', 'sex': '女', 'age': 20, 'height': 160.5}, {'name': '张三', 'sex': '男', 'age': 18, 'height': 170.5}], 'teacher': {'sex': '男', 'age': 30, 'height': 185.5, 'teacher': '递归搜索测试'}}]

● . o []: elemento secundario

import jsonpath
#.与[]作用相同后续就只写一个了
result = jsonpath.jsonpath(class_info, '$.class_one.students')
print(result)

result = jsonpath.jsonpath(class_info, '$[class_one][students]')
print(result)
输出:
[[{'name': '张一', 'sex': '男', 'age': 18, 'height': 170.5}, {'name': '张二', 'sex': '女', 'age': 20, 'height': 160.5}, {'name': '张三', 'sex': '男', 'age': 18, 'height': 170.5}]]

● [,]: admite la selección múltiple en el iterador, las claves múltiples están separadas por comas

import jsonpath
#递归查找包含teacher 或者 name的值
# ..:表示递归查找,可以搜索到该json下所有符合条件的数据
result = jsonpath.jsonpath(class_info, '$..[teacher,name]')
print(result)
输出:
[{'sex': '男', 'age': 30, 'height': 185.5, 'teacher': '递归搜索测试'}, '张一', '张二', '张三', '递归搜索测试']

#获取students下第0个和第2个元素
re = "$..students[0,2]"
result = jsonpath.jsonpath(class_info,re)
print(result)
输出:
[{'name': '张一', 'sex': '男', 'age': 18, 'height': 170.5}, {'name': '张三', 'sex': '男', 'age': 18, 'height': 170.5}]

● [inicio:final:paso]: operación de división de matriz, equivalente a corte, sigue el principio de cerrado a la izquierda y abierto a la derecha

import jsonpath#获取前2位学生的信息,支持下标运算,类似list通过下标取值一样result = jsonpath.jsonpath(class_info, '$.class_one.students[0:2]')print(result)输出:[{'name': '张一', 'sex': '男', 'age': 18, 'height': 170.5}, {'name': '张二', 'sex': '女', 'age': 20, 'height': 160.5}]

● ?(): aplicar expresión de filtro

import jsonpath#找出年龄大于18的学生result = jsonpath.jsonpath(class_info, '$.class_one.students.[?(@.age>18)]')print(result)输出:[{'name': '张二', 'sex': '女', 'age': 20, 'height': 160.5}]

Seis, expresión de filtro

personaje original

describir

==

Igual al signo, pero el número 1 no es igual al carácter 1

!=

no es igual al signo

<

menos que signo

<=

menor que o igual al signo

>

más que el

>=

símbolo mayor o igual que

=~

Determine si coincide con la expresión regular, como [?(@.name =~ /foo.*?/i)]

en

Símbolo de pertenencia: [?(@.name in['Zhang Er','Zhang San'])]

no en

Excluir símbolos: [?(@.name not in ['Zhang Er','Zhang San'])]

&&

AND lógico, para combinar varias expresiones de filtro

II

OR lógico, para combinar varias expresiones de filtro

Siete, el uso de expresiones de filtro.

● ==: igual a

import jsonpath#下面几个比较的和这个一样就不写了#找出name==张三的学生result = "$.class_one.students.[?(@.name=='张三')]"print(result)输出:[{'name': '张三', 'sex': '男', 'age': 18, 'height': 170.5}]

● en: pertenece al símbolo

import jsonpath
#获取name等于张二或者张三
re = "$.class_one.students.[?(@.name in ['张二','张三'])]"
result = jsonpath.jsonpath(class_info,re)
print(result)
输出:
[{'name': '张二', 'sex': '女', 'age': 20, 'height': 160.5}, {'name': '张三', 'sex': '男', 'age': 18, 'height': 170.5}]

#找出name为张二,张三的学生年龄
re = "$.class_one.students.[?(@.name in ['张二','张三'])].age"
result = jsonpath.jsonpath(class_info,re)
print(result)
输出:[20, 18]

● &&: AND lógico, utilizado para combinar varias expresiones de filtro​​​​​​​​

import jsonpathre = "$..students[?(@.name=='张三' && @.age==18)]"result = jsonpath.jsonpath(class_info,re)print(result)输出:[{'name': '张三', 'sex': '男', 'age': 18, 'height': 170.5}]

● || OR lógico, utilizado para combinar varias expresiones de filtro​​​​​​​​

import jsonpath#获取name等于张三或者age等于18的学生re = "$..students[?(@.name=='张三' || @.age==18)]"result = jsonpath.jsonpath(class_info,re)print(result)输出:[{'name': '张一', 'sex': '男', 'age': 18, 'height': 170.5}, {'name': '张三', 'sex': '男', 'age': 18, 'height': 170.5}]

● no en: excluir símbolos​​​​​​​​

import jsonpath#name不等于'张一','张三'的学生re = "$..students[?(@.name not in ['张一','张三'])]"result = jsonpath.jsonpath(class_info,re)print(result)输出:[{'name': '张二', 'sex': '女', 'age': 20, 'height': 160.5}]

Finalmente: Si no quieres experimentar la sensación de no poder encontrar información al aprender, nadie respondiendo preguntas y rendirse después de persistir durante unos días, aquí compartiré contigo algunos recursos de aprendizaje para pruebas de software, con la esperanza de brindarle alguna orientación sobre el camino a seguir. Venga a ayudar, los amigos pueden obtenerlo gratis si lo necesitan. 【保证100%免费】

Colección de preguntas de la entrevista de prueba de software.

Nuestro estudio avanzado de pruebas automatizadas debe ser para encontrar un trabajo bien remunerado. Las siguientes preguntas de la entrevista son los materiales de entrevista más recientes de compañías de Internet de primera línea como Ali, Tencent y Byte, y algunos jefes de Byte han dado respuestas autorizadas. Después Completando este conjunto de materiales de entrevista, creo que todos pueden encontrar un trabajo satisfactorio.

Cómo obtener el archivo de vídeo:

Supongo que te gusta

Origin blog.csdn.net/m0_75277660/article/details/130773093
Recomendado
Clasificación