es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Ruta de Json para encontrar todos los objetos que tienen una propiedad particular.

Parece ser una tarea trivial para el lenguaje “JSON path”, pero no puedo resolverlo correctamente.
Para probar mis intentos uso https://jsonpath.com/ y la biblioteca Newtonsoft.NET.

Tengo un JSON muy simple:

{ “config”: {“id”:”id1″,”key”:”k1″},”external”:{“config”:{“key”:”k2″}}}

Y quiero encontrar todos los objetos “config” que tienen la propiedad “id” presentada.
Pensé que la consulta $..config[?(@.id)] debería funcionar, pero no lo hace.

La consulta $..[?(@.id)] funciona para mi ejemplo, pero en el caso general, obviamente no es exactamente lo que quiero.

Además, la primera consulta funciona para un JSON un poco diferente:

{ “config”:[{“id”:”id1″,”key”:”k1″}],”external”:{“config”:[{“key”:”k2″}]}}

Pero, nuevamente, eso no es estrictamente lo que necesito.

¿Podrías por favor mostrarme el error en mi razonamiento y la consulta JSON path correcta que se ajuste exactamente a mis necesidades?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Según sus requisitos, la consulta de ruta JSON $..config[?(@.id)] debería funcionar para encontrar todos los objetos “config” que tienen la propiedad “id” presentada.

    Sin embargo, la razón por la que no funciona para su ejemplo JSON es porque el objeto “config” en la propiedad “external” no tiene una propiedad “id”. Una posible solución podría ser usar el operador OR en la expresión de filtro para incluir también objetos sin la propiedad “id”:

    $..config[?(@.id || @.id == "")]

    Esto coincidirá con todos los objetos “config” que tienen la propiedad “id” presentada o tienen una cadena vacía como valor de la propiedad “id”.

    ¡Espero que esto ayude!

Comments are closed.