254 votes

Existe-t-il un équivalent JSON de XQuery/XPath ?

Lors de la recherche d'éléments dans des tableaux et des hachages JSON complexes, comme :

[
    { "id": 1, "name": "One", "objects": [
        { "id": 1, "name": "Response 1", "objects": [
            // etc.
        }]
    }
]

Existe-t-il une sorte de langage de requête que je peux utiliser pour trouver un élément in [0].objects where id = 3 ?

0 votes

Pas à moins que vous en fassiez un. Laissez l'interrogation au serveur et utilisez REST pour obtenir uniquement les données dont vous avez besoin.

5 votes

+1 bonne idée. Je vais écrire ça demain

2 votes

Ce n'est pas XPath, mais j'ai trouvé JLinq assez bon (qui fait que le code se lit comme in(...).where(...).select(...) ) : hugoware.net/Projets/jLinq .

137voto

Mike Christensen Points 29735

Yup, ça s'appelle JSONPath :

Il est également intégré dans DOJO .

3 votes

La réponse de Brian suggère d'utiliser le module jsonQuery au lieu de du module jsonPath dans dojo.

5 votes

Est-ce que c'est solide ? Et je ne trouve pas de version Java ou C#, ce qui est un obstacle pour nous.

2 votes

Le site lié ici prévoit Javascript et PHP. Si vous avez besoin d'une implémentation Java, il y en a une ici : code.google.com/p/json-path

24voto

Brian Clozel Points 6473

Je pense que JSONQuery est un sur-ensemble de JSONPath et ainsi le remplace dans le dojo . Il y a aussi RQL .

Extrait de la documentation de Dojo :

JSONQuery est une version étendue de JSONPath avec des fonctionnalités supplémentaires de sécurité, une facilité d'utilisation et un ensemble complet d'outils d'interrogation de données de données, y compris le filtrage, la recherche récursive, le tri, la mise en correspondance et des expressions flexibles avec des comparaisons de chaînes de caractères joker et divers opérateurs.

JSONselect a un autre point de vue sur la question (de type sélecteur CSS, plutôt que XPath) et dispose d'une Mise en œuvre de JavaScript .

4 votes

Le lien github JSONQuery semble être mort. JSONSelect a aussi une version JavaScript maintenant.

21voto

grtjn Points 2888

Les autres alternatives que je connais sont

  1. JSONiq qui spécifie deux sous-types de langages : un qui masque les détails XML et fournit une syntaxe de type JS, et un qui enrichit la syntaxe XQuery avec des constructeurs JSON et autres. Zorba met en œuvre JSONiq.
  2. Corona qui s'appuie sur MarkLogic, fournit une interface REST pour le stockage, la gestion et la recherche de contenu XML, JSON, texte et binaire.
  3. MarkLogic 6 et plus offrent une interface REST similaire à celle de Corona.
  4. MarkLogic Les versions 8 et ultérieures prennent en charge JSON de manière native dans leur environnement XQuery et Server-side JavaScript. Vous pouvez y appliquer XPath.

HTH.

3 votes

Il existe désormais une mise en œuvre de JSONiq : Zorba 2.6 la supporte officiellement.

0 votes

Remarque : MarkLogic stocke JSON en mode natif à partir de la version 8, et permet d'appliquer XPath directement dessus.

16voto

user1824910 Points 111

Essayez d'utiliser JSPath

JSPath est un langage spécifique au domaine (DSL) qui vous permet de naviguer et de trouver des données dans vos documents JSON. Grâce à JSPath, vous pouvez sélectionner des éléments de JSON afin de récupérer les données qu'ils contiennent.

JSPath pour JSON comme XPath pour XML.

Il est fortement optimisé à la fois pour Node.js et pour les navigateurs modernes.

11voto

Christian Grün Points 2150

XQuery peut être utilisé pour interroger JSON, à condition que le processeur offre un support JSON. Voici un exemple simple de la façon dont BaseX peut être utilisé pour trouver des objets avec "id" = 1 :

json:parse('[
    { "id": 1, "name": "One", "objects": [
        { "id": 1, "name": "Response 1", "objects": [ "etc." ] }
    ]}
]')//value[.//id = 1]

0 votes

(6 ans plus tard) Saxon utilisera XQuery 3.1, qui interroge JSON. Mon expérience de Saxon consiste à utiliser le fichier jar exécuté par java. Il existe un module node nommé saxon-java mais je ne suis pas sûr de savoir comment il fonctionne avec JSON. Et il existe une autre nouveauté de Saxonica appelée Saxon-JS.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X