Problemas reales encontrados
{
"code": 200,
"data": {
"user": {
"profile": {
"name": "张三",
"contacts": [
{"type": "email", "value": "[email protected]"},
{"type": "phone", "value": "13800138000"}
]
}
},
"orders": [
{"id": 1, "amount": 99.99, "status": "paid"},
{"id": 2, "amount": 199.99, "status": "pending"}
]
}
}
Necesito extraer:- Nombre de usuario
- Todas las direcciones de correo electrónico
- Cantidad del pedido pagado
Expresión JSONPath correcta
1. Extraer nombre de usuario
$.data.user.profile.name
Resultado:"张三"
2. Extraiga todas las direcciones de correo electrónico
$.data.user.profile.contacts[?(@.type=='email')].value
结果:["[email protected]"]
3. Extraer el importe de los pedidos pagados
$.data.orders[?(@.status=='paid')].amount
结果:[99.99]
4. Extraiga todos los ID y montos de los pedidos
$.data.orders[*].[id,amount]
结果:[[1,99.99],[2,199.99]]
Prueba en Tools Obsession
AbrirJSONPath Tester, pegue la respuesta API a la izquierda, ingrese la expresión a la derecha y haga clic en "Probar". La herramienta mostrará inmediatamente los resultados coincidentes para ayudarle a verificar si la expresión es correcta.Errores comunes de JSONPath
Error 1: Olvidé $símbolo
❌ data.user.name
✅ $.data.user.name
Error 2: El índice de matriz comienza en 1
❌ $.data.orders[1] // 这是第二个元素
✅ $.data.orders[0] // 这才是第一个元素
Error 3: Error de sintaxis del filtro
❌ $.data.orders[?(@.status=paid)] // 单个等号
❌ $.data.orders[?(@.status==paid)] // 没有引号
✅ $.data.orders[?(@.status=='paid')] // 正确
Error 4: Búsqueda recursiva usada en exceso
❌ $..name // 会找所有层级的 name,可能匹配太多
✅ $.data.user.profile.name // 明确路径更精确
Error 5: Uso incorrecto de comillas
❌ $.data.orders[?(@.status=="paid")] // 双引号在某些解析器中会出错
✅ $.data.orders[?(@.status=='paid')] // 单引号更稳定
Consejos prácticos
Consejo 1: Pruebe primero la ruta principal
No estoy seguro la estructura de datos? Pruebe primero la ruta principal:$.data // 确认能取到 data
$.data.user // 确认能取到 user
$.data.user.profile // 确认能取到 profile
Consejo 2: utilice el corte
¿Solo necesita los primeros 3 pedidos?$.data.orders[0:3]
Consejo 3: Obtenga el último elemento
$.data.orders[-1:]
Consejo 4: Selección de múltiples campos
Obtenga múltiples campos al mismo tiempo:$.data.orders[*].[id,status]
Consejo 5: Filtrado de condiciones complejas
La cantidad es mayor que 100 y el estado es pagado:$.data.orders[?(@.amount>100 && @.status=='paid')]
Preguntas frecuentes
- P: ¿Cuál es la diferencia entre JSONPath y JSON?
- P: ¿Todas las bibliotecas JSON son compatibles con JSONPath?
- P: ¿Por qué mi expresión funciona en la herramienta pero no en el código?
- P: ¿Se pueden modificar los datos JSON?
- P: ¿Cómo es el rendimiento?
$..name) pueden ser lentas en JSON grandes. Se recomienda aclarar el camino. - P: ¿Cómo lidiar con valores nulos o campos faltantes?
?() filtro: $.data.orders[?(@.amount)]
Solo devolver pedidos con campo de importe. Ejemplo completo
Datos de respuesta API (versión simplificada):{
"data": {
"products": [
{"id": 1, "name": "iPhone", "price": 999, "inStock": true},
{"id": 2, "name": "MacBook", "price": 1999, "inStock": false},
{"id": 3, "name": "iPad", "price": 799, "inStock": true}
]
}
}
Extraiga todos los nombres de productos en stock: $.data.products[?(@.inStock==true)].name
结果:["iPhone","iPad"]
¿Necesita procesar datos JSON complejos? Pruebe sus expresiones en tiempo real en JSONPath Tester para adictos a las herramientas.