Δοκιμή εκφράσεων JSONPath
Δοκιμάστε εκφράσεις JSONPath στο δικό σας JSON στο πρόγραμμα περιήγησης: φίλτρα, slices, αναδρομική κάθοδος, διαδρομές και JSON Pointers.
Πώς να δοκιμάσετε μια έκφραση JSONPath
- Επικολλήστε το JSON σας στο Δεδομένα JSON ή πατήστε Φόρτωση δειγματικών δεδομένων για να χρησιμοποιήσετε το κλασικό παράδειγμα του βιβλιοπωλείου.
- Πληκτρολογήστε μια έκφραση στο Έκφραση JSONPath ή διαλέξτε μία από τα Παραδείγματα.
- Το αποτέλεσμα ενημερώνεται καθώς πληκτρολογείτε· το Εκτέλεση ερωτήματος το εκτελεί ξανά. Η γραμμή κατάστασης δείχνει τον αριθμό των αντιστοιχιών.
- Χρησιμοποιήστε το Εμφάνιση για να εναλλάσσεστε ανάμεσα σε Τιμές, Διαδρομές, JSON Pointers και Διαδρομές και τιμές, και μετά αντιγράψτε το αποτέλεσμα.
Η σύνταξη JSONPath με δύο λόγια
| Σύνταξη | Σημασία | Παράδειγμα |
|---|---|---|
$ |
η ρίζα του εγγράφου | $ |
.name ή ['name'] |
ένα θυγατρικό | $.store.bicycle |
* |
κάθε θυγατρικό | $.store.* |
.. |
αναδρομική κάθοδος, σε οποιοδήποτε βάθος | $..author |
[n] |
δείκτης πίνακα, από το 0 | $..book[2] |
[start:end:step] |
slice· οι αρνητικοί αριθμοί μετρούν από το τέλος | $..book[-1:] |
[a,b] |
ένωση | $..book[0,1] |
[?(expr)] |
φίλτρο | $..book[?(@.price < 10)] |
^ |
ο γονέας κάθε αντιστοιχίας | $..book[?(@.price > 20)]^ |
~ |
το όνομα της ιδιότητας αντί για την τιμή | $.store.*~ |
Τα αποτελέσματα επιστρέφονται με τη σειρά του εγγράφου. Οι Διαδρομές δίνουν κανονικοποιημένες διαδρομές όπως $['store']['book'][0]['title'] και τα JSON Pointers δίνουν τη μορφή RFC 6901 /store/book/0/title, χρήσιμη για JSON Patch ή για τις διαδρομές σφαλμάτων των επικυρωτών JSON Schema.
Εκφράσεις φίλτρων: τι υποστηρίζεται
Τα φίλτρα αποτιμώνται με το jsonpath-plus σε ασφαλή λειτουργία: η έκφραση αναλύεται και ερμηνεύεται από έναν μικρό αποτιμητή και δεν περνά ποτέ σε eval ή new Function. Μέσα στο [?( … )] μπορείτε να χρησιμοποιήσετε:
- το
@για το τρέχον στοιχείο, τα@.fieldκαι@['field']για τα μέλη του, το@rootγια ολόκληρο το έγγραφο (το$δεν είναι διαθέσιμο μέσα σε φίλτρο)· - συγκρίσεις
==,!=,===,!==,<,<=,>,>=· - λογικούς τελεστές
&&,||,!, αριθμητικούς+ - * / %και τον τριαδικόa ? b : c· - literals συμβολοσειράς, αριθμού,
true,false,nullκαι κανονικών εκφράσεων· - μεθόδους των ίδιων των τιμών, για παράδειγμα
@.title.startsWith('S'),@.tags.includes('new')ή@.title.match(/lord/i)· - τα
@property(το κλειδί ή ο δείκτης του τρέχοντος στοιχείου),@parentκαι@path(η κανονικοποιημένη διαδρομή του), στο στυλ του jsonpath-plus.
Η πρόσβαση στα constructor, __proto__ και στον κατασκευαστή Function αποκλείεται. Αν ένα φίλτρο αποτύχει σε ένα στοιχείο, για παράδειγμα το @.isbn.startsWith('0') σε βιβλίο χωρίς isbn, το στοιχείο αυτό απλώς δεν ταιριάζει· ένα συντακτικό σφάλμα στην έκφραση αναφέρεται. Τα φίλτρα γραμμένα με τον τρόπο του RFC 9535, [?@.price < 10] χωρίς παρενθέσεις, γίνονται δεκτά και διαβάζονται ως [?(@.price < 10)]. Οι συναρτήσεις του RFC 9535 όπως οι length(), count(), match() και search() δεν είναι διαθέσιμες: χρησιμοποιήστε αντί γι’ αυτές μεθόδους JavaScript όπως το @.name.length.
Οι επιλογείς τύπων του jsonpath-plus λειτουργούν επίσης στο τέλος μιας διαδρομής: το $..*@number() επιστρέφει κάθε αριθμό και τα @string(), @boolean(), @array(), @object(), @null() και @integer() κάνουν το ίδιο για άλλους τύπους. Όλα εκτελούνται τοπικά στο πρόγραμμα περιήγησής σας.
Συχνές ερωτήσεις
Στέλνεται το JSON μου σε διακομιστή;
Όχι. Η ανάλυση και η αποτίμηση γίνονται στο πρόγραμμα περιήγησής σας και τα δεδομένα σας δεν φεύγουν ποτέ από τον υπολογιστή σας.
Γιατί το φίλτρο μου δεν επιστρέφει τίποτα;
Ελέγξτε ότι η διαδρομή πριν από το φίλτρο επιλέγει πίνακα ή αντικείμενο: το $.store.book[?(@.price < 10)] φιλτράρει τα βιβλία, ενώ το $.store[?(@.price < 10)] κοιτάζει τα book και bicycle. Μια ιδιότητα που λείπει από ένα στοιχείο είναι undefined, οπότε οι συγκρίσεις με αυτήν είναι ψευδείς.
Ποια είναι η διαφορά ανάμεσα στο `==` και στο `===`;
Όπως στη JavaScript, το == μετατρέπει τύπους (το "10" == 10 είναι αληθές), ενώ το === συγκρίνει τύπο και τιμή.
Γιατί η έξοδος είναι περιορισμένη;
Στο αποτέλεσμα γράφονται μόνο οι πρώτες 10.000 αντιστοιχίες, ώστε η σελίδα να μένει αποκρίσιμη· η γραμμή κατάστασης δίνει τον πλήρη αριθμό.
Είναι το JSONPath τυποποιημένο;
Ναι, από το 2024, με το RFC 9535. Οι υλοποιήσεις εξακολουθούν να διαφέρουν, ειδικά στα φίλτρα· το εργαλείο ακολουθεί το jsonpath-plus, τη σύνταξη του αρχικού JSONPath του Stefan Goessner.
Σχετικά εργαλεία
- Μορφοποίηση και επικύρωση JSON Δωρεάν μορφοποίηση και επικύρωση JSON που κάνει beautify, minify και έλεγχο του JSON στο πρόγραμμα περιήγησής σας, με συντακτικά σφάλματα ανά γραμμή και στήλη.
- Επικύρωση JSON Schema Επικυρώστε ένα έγγραφο JSON με ένα JSON Schema στο πρόγραμμα περιήγησής σας. Κάθε σφάλμα εμφανίζεται με διαδρομή στιγμιότυπου, λέξη-κλειδί και διαδρομή schema.
- Δοκιμή regex Δοκιμάστε κανονικές εκφράσεις JavaScript ζωντανά, με επισημασμένες αντιστοιχίες, ομάδες σύλληψης, αντικατάσταση και επεξήγηση κάθε στοιχείου του μοτίβου.