---
title: "JSON Path"
description: ""
type: "academy"
category: "module"
tags: []
authors: [Anonymous]
date: "2026-10-08"
last_update: "2026-10-08"
time_minutes: 10
draft: false
unlisted: false
url: "https://www.billmysales.com/academy/leer-datos-de-json-con-selectores/json-path"
---

# JSON Path




---

## Ventajas y desventajas

Ventajas y desventajas

# Ventajas y desventajas

Es verdad, es natural pensar &quot;¿para qué creamos selectores si existe JSONPath?&quot;. Tanto la implementación personalizada con selectores como el uso de JSONPath tienen sus ventajas y desventajas.

Principalmente las ventajas de usar los selectores son:

1.  Tenemos control total de la funcionalidad y la podemos adaptar según sea necesario para nuestra plataforma BillMySales.
2. Es muy simple escribir un selector para casos específicos.
3. Nos encanta aprender ~y reinventar la rueda.~

Algunas ventajas de usar JSONPath son:

1. Es un estándar de la industria, por lo que muchos usuarios técnicos ya lo conocerán.
2. Tiene más características y funcionalidades para manejar los datos de un JSON.

Nuestros selectores personalizados han sido probados minuciosamente y están funcionando bien para las necesidades específicas de BillMySales. Sin embargo,  como nos gusta siempre estar mejorando, hemos añadido compatibilidad con JSONPath. De esta forma, puedes escribir un selector tanto con nuestro formato como con el estándar de la industria.


    
---

## Selector JSONPath

Selector JSONPath

# Selector JSONPath

Consideraremos el siguiente JSON como base para todos los ejemplos de esta sección. Este JSON representa datos típicos en un contexto de facturación electrónica (no asociada a ningún país específico):
 ```json
{
  &quot;cliente&quot;: {
    &quot;nombre&quot;: &quot;Juan Pérez&quot;,
    &quot;es_vip&quot;: false
  },
  &quot;total&quot;: 150000,
  &quot;items&quot;: [
    {&quot;nombre&quot;: &quot;Producto A&quot;, &quot;precio&quot;: 50000},
    {&quot;nombre&quot;: &quot;Producto B&quot;, &quot;precio&quot;: 100000}
  ],
  &quot;factura&quot;: {
    &quot;detalles&quot;: [
      {&quot;producto&quot;: &quot;Producto A&quot;, &quot;cantidad&quot;: 1},
      {&quot;producto&quot;: &quot;Producto B&quot;, &quot;cantidad&quot;: 2}
    ]
  },
  &quot;productos&quot;: [
    {&quot;id&quot;: &quot;A100&quot;, &quot;nombre&quot;: &quot;Producto A&quot;, &quot;precio&quot;: 25000},
    {&quot;id&quot;: &quot;B200&quot;, &quot;nombre&quot;: &quot;Producto B&quot;, &quot;precio&quot;: 50000}
  ],
  &quot;ventas&quot;: [
    {&quot;producto&quot;: &quot;Producto 1&quot;, &quot;cantidad&quot;: 3},
    {&quot;producto&quot;: &quot;Producto 3&quot;, &quot;cantidad&quot;: 6},
    {&quot;producto&quot;: &quot;Producto 5&quot;, &quot;cantidad&quot;: 10}
  ],
  &quot;historial_compras&quot;: [
    {&quot;codigo&quot;: &quot;C101&quot;, &quot;detalle&quot;: {&quot;fecha&quot;: &quot;2023-01-15&quot;}},
    {&quot;codigo&quot;: &quot;C102&quot;, &quot;detalle&quot;: {&quot;fecha&quot;: &quot;2023-03-15&quot;}},
    {&quot;codigo&quot;: &quot;C103&quot;, &quot;detalle&quot;: {&quot;fecha&quot;: &quot;2023-05-20&quot;}}
  ],
  &quot;numeros_de_serie&quot;: [&quot;NS100&quot;, &quot;NS101&quot;, &quot;NS102&quot;]
}
```

## Ejemplos

**1. Acceso Directo a una Clave en Primer Nivel**
* **Selector JSONPath:** $.total
* **Descripción:** Extrae el valor total de la factura.
* **Resultado:** 150000

**2. Acceso a un Elemento Anidado**
* **Selector JSONPath:** $.cliente.nombre
* **Descripción:** Obtiene el nombre del cliente de la factura.
* **Resultado:** &quot;Juan Pérez&quot;

**3. Acceso a un Elemento de un Arreglo por Índice**
* **Selector JSONPath:** $.items[0].precio
* **Descripción:** Recupera el precio del primer artículo en la factura.
* **Resultado:** 50000

**4. Acceso a un Elemento Anidado Dentro de un Arreglo**
* **Selector JSONPath:** $.factura.detalles[1].cantidad
* **Descripción:** Accede a la cantidad del segundo artículo en el detalle de la factura.
* **Resultado:** 2

**5. Filtrar Elementos de un Arreglo (por valor existente)**
* **Selector JSONPath:** $.productos[?(@.id == &#039;A100&#039;)].precio
* **Descripción:** Busca y obtiene el precio de un producto específico, identificado por su ID.
* **Resultado:** 25000

**6. Filtrar Elementos de un Arreglo (resultado vacío)**
* **Selector JSONPath:** $.productos[?(@.id == &#039;A999&#039;)]
* **Descripción:** Intenta encontrar un producto con un ID que no existe en la lista, esperando un resultado vacío.
* **Resultado:** None

**7. Acceso a Todos los Elementos de un Arreglo**
* **Selector JSONPath:** $.numeros_de_serie[*]
* **Descripción:** Obtiene todos los números de serie de los productos.
* **Resultado:** [&quot;NS100&quot;, &quot;NS101&quot;, &quot;NS102&quot;]

**8. Obtener Elementos Basados en una Condición Compleja**
* **Selector JSONPath:** $.ventas[?(@.cantidad &gt; 5)].producto
* **Descripción:** Selecciona los nombres de los productos que se vendieron en cantidades mayores a cinco.
* **Resultado:** [&quot;Producto 3&quot;, &quot;Producto 5&quot;]

**9. Obtener un Elemento Anidado en un Diccionario dentro de un Arreglo**
* **Selector JSONPath:** $.historial_compras[?(@.codigo == &#039;C102&#039;)].detalle.fecha
* **Descripción:** Encuentra la fecha de una compra específica en el historial de compras, usando su código.
* **Resultado:** &quot;2023-03-15&quot;

**10. Acceso Directo a un Elemento Booleano**
* **Selector JSONPath:** $.cliente.es_vip
* **Descripción:** Verifica si el cliente es marcado como VIP.
* **Resultado:** false

Estos ejemplos demuestran la versatilidad y potencia de JSONPath para acceder y manipular datos en un JSON, especialmente útil en escenarios de facturación electrónica, permitiendo desde el acceso a datos simples hasta la extracción basada en condiciones complejas.


    
---

## Combinaciones con JSONPath

Combinaciones con JSONPath

# Combinaciones con JSONPath

Consideraremos el siguiente JSON como base para todos los ejemplos de esta sección. Este JSON representa datos típicos en un contexto de facturación electrónica (no asociada a ningún país específico):

```json
{
  &quot;factura_id&quot;: &quot;FAC-00123&quot;,
  &quot;cliente&quot;: {
    &quot;nombre&quot;: &quot;Empresa XYZ&quot;,
    &quot;rut&quot;: &quot;76.123.456-7&quot;
  },
  &quot;fecha_emision&quot;: &quot;2023-10-05&quot;,
  &quot;detalles&quot;: [
    {&quot;producto&quot;: &quot;Laptop Pro&quot;, &quot;cantidad&quot;: 2, &quot;precio_unitario&quot;: 1200000},
    {&quot;producto&quot;: &quot;Monitor 24\&quot;&quot;, &quot;cantidad&quot;: 3, &quot;precio_unitario&quot;: 240000}
  ],
  &quot;estado_pago&quot;: &quot;pendiente&quot;,
  &quot;montos&quot;: {
    &quot;neto&quot;: 3120000,
    &quot;iva&quot;: 592800,
    &quot;total&quot;: 3712800
  },
  &quot;historial_pagos&quot;: [],
  &quot;es_exportacion&quot;: false
}
```

## Ejemplos

**1. Acceso Directo y Concatenación de Texto**
* **Selector:** &quot;factura_id: &quot;($.factura_id)
* **Descripción:** Concatena el texto &quot;factura_id: &quot; con el ID de la factura.
* **Resultado:** &quot;factura_id: FAC-00123&quot;

**2. Selección con OR y JSONPath**
* **Selector:** ($.estado_pago_inexistente)||($.estado_pago)
* **Descripción:** Utiliza el operador OR para seleccionar el estado de pago de la factura, proporcionando un valor por defecto si el campo original no existe.
* **Resultado:** &quot;pendiente&quot;

**3. Valor por Defecto con OR y JSONPath**
* **Selector:** ($.historial_pagos_inexistente)||&quot;Sin pagos&quot;
* **Descripción:** Ofrece un valor por defecto en caso de que el historial de pagos no esté presente o esté vacío.
* **Resultado:** &quot;Sin pagos&quot;

**4. Condición con IF Ternario y JSONPath**
* **Selector:** ((($.estado_pago_inexistente)||($.estado_pago)) == &quot;pendiente&quot; ? (&quot;Pendiente&quot;) : (&quot;Pagado&quot;))
* **Descripción:** Comprueba si el estado del pago es &quot;pendiente&quot; y muestra &quot;Pendiente&quot; o &quot;Pagado&quot; en consecuencia.
* **Resultado:** &quot;Pendiente&quot;

**5. Concatenación con Valor de un Arreglo**
* **Selector:** &quot;detalles[0]: &quot;($.detalles[0].producto)
* **Descripción:** Concatena la descripción &quot;detalles[0]: &quot; con el nombre del primer producto en los detalles de la factura.
* **Resultado:** &quot;detalles[0]: Laptop Pro&quot;

**6. Filtrado de Arreglo y Concatenación**
* **Selector:** &quot;Productos con precio &gt; 500000: &quot; + str($.detalles[?(@.precio_unitario &gt; 500000)].producto)
* **Descripción:** Concatena una descripción con la lista de productos cuyo precio unitario supera los 500000.
* **Resultado:** &quot;Productos con precio &gt; 500000: [&#039;Laptop Pro&#039;]&quot;

**7. Acceso a Elemento Anidado y Concatenación**
* **Selector:** &quot;Total factura: &quot;($.montos.total)
* **Descripción:** Concatena &quot;Total factura: &quot; con el monto total de la factura.
* **Resultado:** &quot;Total factura: 3712800&quot;

**8. Filtrado de Arreglo de Diccionarios y Concatenación**
* **Selector:** &quot;Cantidad de Laptops: &quot;($.detalles[?(@.producto == &quot;Laptop Pro&quot;)].cantidad)
* **Descripción:** Concatena &quot;Cantidad de Laptops: &quot; con la cantidad de laptops compradas según los detalles de la factura.
* **Resultado:** &quot;Cantidad de Laptops: 2&quot;

**9. Concatenación de un Valor Extraído del Arreglo con Texto**
* **Selector:** &quot;Primer producto: &quot;($.detalles[0].producto)**
* **Descripción:** Concatena &quot;Primer producto: &quot; con el nombre del primer producto en la factura.
* **Resultado:** &quot;Primer producto: Laptop Pro&quot;

**10. Acceder a un Valor Anidado y Concatenar con un Valor de un Arreglo Usando JSONPath**
* **Selector:** &quot;Cliente y neto: &quot;($.cliente.nombre)&quot; y &quot;($.montos.neto)
* **Descripción:** Concatena el nombre del cliente y el monto neto de la factura, separados por &quot; y &quot;.
* **Resultado:** &quot;Cliente y neto: Empresa XYZ y 3120000&quot;

Estos ejemplos demuestran cómo los selectores pueden ser utilizados de manera flexible para extraer y combinar datos de un JSON, especialmente en contextos de facturación electrónica.


    
---

## ¿Por qué usar selectores?

¿Por qué usar selectores?

# ¿Por qué usar selectores?

![¿Por qué usar selectores?](https://www.billmysales.com/img/content/academy/leer-datos-de-json/por-que-usar-selectores.jpg)

En el mundo digital de hoy, la eficiencia y precisión en el manejo de datos son cruciales, especialmente cuando se trata de procesos tan importantes como la facturación electrónica. Aquí es donde entra en juego nuestra innovadora solución que combina la potencia de JSONPath con la flexibilidad de nuestros selectores personalizados.

¿Por qué esta combinación es una revolución en la manipulación de datos JSON? JSONPath por sí solo es una herramienta potente para extraer datos de estructuras JSON, permitiendo acceder a información compleja de manera sencilla y directa. Sin embargo, cuando se enfrenta a necesidades específicas de personalización y manejo de datos en contextos únicos, como la facturación electrónica, su alcance puede resultar limitado.

Aquí es donde nuestros selectores personalizados entran en juego, ofreciendo un nivel de personalización y flexibilidad inigualable. Al combinarlos con JSONPath, se desbloquean posibilidades ilimitadas para manipular, transformar y presentar datos de formas que antes eran imposibles o requerían un esfuerzo considerable de codificación.

## Beneficios clave de esta combinación poderosa

**1. Personalización Avanzada:** Nuestros selectores personalizados permiten ajustes finos en la extracción y presentación de datos, lo que es crucial en procesos de facturación donde cada detalle cuenta.

**2. Mayor Control y Precisión:** Mientras JSONPath maneja la extracción de datos de manera eficiente, nuestros selectores añaden una capa adicional de control, permitiendo ajustes precisos y condiciones específicas.

**3. Facilidad de Uso y Aprendizaje:** Aunque JSONPath es simple, la integración con nuestros selectores hace que sea aún más accesible para usuarios no técnicos, permitiendo realizar tareas complejas sin necesidad de conocimientos profundos de programación.

**4. Soluciones Creativas para Requisitos Únicos:** La combinación de JSONPath con selectores personalizados abre un mundo de soluciones creativas para requisitos específicos que van más allá de la extracción de datos estándar.

**5. Optimización de Procesos de Negocio:** Esta herramienta no solo mejora la precisión en la facturación electrónica, sino que optimiza los procesos de negocio, ahorrando tiempo y recursos valiosos.

En resumen, al combinar JSONPath con nuestros selectores personalizados, no solo aprovechas las fortalezas de ambos sino que también abres la puerta a un mundo de posibilidades en la gestión de datos. Esta combinación no es simplemente una mejora; es una transformación en la forma en que interactúas y utilizas los datos en tu día a día, especialmente en procesos críticos como la facturación electrónica. ¡Descubre el poder de esta integración y lleva la gestión de tus datos a un nuevo nivel de eficiencia y efectividad!


    

---
Última actualización el 08/10/2026

