Εργαλείο Σύγκρισης JSON - Σύγκριση JSON Online Δωρεάν | Διαφορές JSON
Συγκρίνετε JSON online δωρεάν με το γρήγορο εργαλείο σύγκρισης JSON. Βρείτε διαφορές άμεσα με έγχρωμα αποτελέσματα. 100% ασφαλές, εργαλείο διαφορών JSON βασισμένο στον περιηγητή. Καμία εγγραφή δεν απαιτείται.
Εργαλείο Σύγκρισης JSON
Τεκμηρίωση
Ένα εργαλείο σύγκρισης JSON, που συχνά ονομάζεται εργαλείο σύγκρισης διαφορών JSON, συγκρίνει δύο τιμές JSON (JavaScript Object Notation) και αναφέρει τι άλλαξε μεταξύ τους. Παραθέτει κάθε ιδιότητα ή στοιχείο πίνακα που προστέθηκε, αφαιρέθηκε ή τροποποιήθηκε, μαζί με την ακριβή θέση του στα δεδομένα. Αυτή η σελίδα εξηγεί πώς λειτουργεί το εργαλείο σύγκρισης JSON του whiz.tools, με αναλυτικά παραδείγματα που βασίζονται στην πραγματική λογική σύγκρισής του.
Τι είναι η σύγκριση JSON;
Η σύγκριση JSON είναι η διαδικασία ελέγχου δύο εγγράφων JSON το ένα έναντι του άλλου, για τον εντοπισμό διαφορών. Ένα έγγραφο JSON είναι ένα τμήμα κειμένου που αποτελείται από αντικείμενα (ζεύγη κλειδιού-τιμής μέσα σε άγκιστρα), πίνακες (διατεταγμένες λίστες μέσα σε αγκύλες) και πρωτογενείς τιμές, όπως συμβολοσειρές, αριθμούς, τιμές boolean και null. Η οπτική σύγκριση δύο τέτοιων εγγράφων γίνεται αργά και είναι επιρρεπής σε σφάλματα όταν ξεπερνούν μερικές γραμμές, επομένως ένα εργαλείο σύγκρισης εκτελεί αυτόματα την αντιστοίχιση και επισημαίνει κάθε αλλαγή.
Οι προγραμματιστές χρησιμοποιούν αυτού του είδους τη σύγκριση για να ελέγχουν αποκρίσεις API, να παρακολουθούν αλλαγές σε αρχεία ρυθμίσεων, να επαληθεύουν ότι μια μεταφορά δεδομένων δεν απώλεσε πληροφορίες και να εξετάζουν αλλαγές σε αρχεία JSON που βρίσκονται υπό έλεγχο εκδόσεων.
Πώς συγκρίνει το εργαλείο δύο τιμές JSON
Το εργαλείο αναλύει και τις δύο εισόδους με έναν τυπικό αναλυτή JSON και στη συνέχεια διατρέχει τα δύο αποτελέσματα μαζί, ένα επίπεδο κάθε φορά. Σε κάθε βήμα θέτει τρία ερωτήματα, με τη σειρά:
- Έχουν οι δύο τιμές διαφορετικούς τύπους (για παράδειγμα, η μία είναι αντικείμενο και η άλλη αριθμός) ή είναι η μία
nullενώ η άλλη όχι; Αν ναι, καταγράφει μια τροποποίηση σε εκείνο το σημείο και σταματά τη βαθύτερη σύγκριση. - Είναι και οι δύο τιμές πρωτόγονες (συμβολοσειρά, αριθμός, boolean ή null); Αν ναι, τις συγκρίνει απευθείας. Κάθε διαφορά, συμπεριλαμβανομένης της αλλαγής από τον αριθμό
123στη συμβολοσειρά"123", θεωρείται τροποποίηση. - Είναι και οι δύο τιμές αντικείμενα ή και οι δύο πίνακες; Αν ναι, συγκρίνει τα περιεχόμενά τους με βάση τους παρακάτω κανόνες και εφαρμόζει αναδρομικά τη διαδικασία σε τυχόν ένθετα αντικείμενα ή πίνακες.
Κάθε διαφορά καταγράφεται με μια διαδρομή, όπως user.address.city ή tags[1], ώστε να εντοπίζεται εύκολα στο αρχικό έγγραφο. Τα μέλη αντικειμένων ενώνονται με τελεία και τα στοιχεία πινάκων εμφανίζονται με τον δείκτη τους μέσα σε αγκύλες. Μια διαφορά στην κορυφή του εγγράφου, όπως η αντικατάσταση ενός πίνακα από ένα αντικείμενο, δεν έχει διαδρομή μέσα στα δεδομένα και επομένως επισημαίνεται ως $. Αυτό είναι το αναγνωριστικό ρίζας που ορίζεται από το RFC 9535, το πρότυπο JSONPath, και αντιπροσωπεύει ολόκληρο το έγγραφο.
Σύγκριση αντικειμένων
Για δύο αντικείμενα JSON, το εργαλείο συλλέγει κάθε κλειδί που εμφανίζεται σε οποιοδήποτε από τα δύο αντικείμενα. Για κάθε κλειδί:
- Αν το κλειδί υπάρχει μόνο στο δεύτερο αντικείμενο, πρόκειται για προστιθέμενη ιδιότητα.
- Αν το κλειδί υπάρχει μόνο στο πρώτο αντικείμενο, πρόκειται για αφαιρεθείσα ιδιότητα.
- Αν το κλειδί υπάρχει και στα δύο, το εργαλείο συγκρίνει αναδρομικά τις δύο τιμές.
Η σειρά των κλειδιών δεν έχει σημασία. Το πρότυπο JSON δεν ορίζει σειρά για τα μέλη αντικειμένων, επομένως τα {"a":1,"b":2} και {"b":2,"a":1} θεωρούνται ίδια.
Σύγκριση πινάκων
Οι πίνακες συγκρίνονται ανά θέση και όχι ανά περιεχόμενο. Το εργαλείο διατρέχει και τους δύο πίνακες δείκτη προς δείκτη και συγκρίνει ό,τι βρίσκεται σε κάθε δείκτη, έως το μήκος του μεγαλύτερου πίνακα. Αν ένας πίνακας είναι μικρότερος, τα επιπλέον στοιχεία στο τέλος του μεγαλύτερου αναφέρονται ως προστιθέμενα ή αφαιρεθέντα.
Αυτό σημαίνει ότι το εργαλείο δεν επιχειρεί ποτέ να αντιστοιχίσει στοιχεία πινάκων με βάση το περιεχόμενό τους. Δεν αντιλαμβάνεται ότι ένα αντικείμενο «μετακινήθηκε» από τον δείκτη 1 στον δείκτη 2· βλέπει μόνο ότι η τιμή σε κάθε δείκτη άλλαξε. Η διαγραφή ή η εισαγωγή ενός στοιχείου στη μέση ενός πίνακα μετατοπίζει κατά μία θέση κάθε επόμενο στοιχείο, οπότε συνήθως εμφανίζεται ως αρκετές ξεχωριστές τροποποιήσεις και όχι ως μία σαφής προσθήκη ή αφαίρεση.
Λυμένο παράδειγμα
Παράδειγμα 1: σύγκριση δύο αντικειμένων
Πρώτο JSON:
1{ "user": { "address": { "city": "New York", "zip": "10001" } } }
2Δεύτερο JSON:
1{ "user": { "address": { "city": "Boston", "zip": "02108" } } }
2Αποτέλεσμα:
- Τροποποιήθηκε το
user.address.city:"New York"→"Boston" - Τροποποιήθηκε το
user.address.zip:"10001"→"02108"
Παράδειγμα 2: αλλαγή πίνακα στο τέλος
Πρώτο JSON:
1{ "tags": ["important", "urgent", "review"] }
2Δεύτερο JSON:
1{ "tags": ["important", "critical", "review", "documentation"] }
2Ο δείκτης 0 δεν άλλαξε, ο δείκτης 1 άλλαξε, ο δείκτης 2 δεν άλλαξε και ο δείκτης 3 υπάρχει μόνο στον δεύτερο πίνακα. Αποτέλεσμα:
- Τροποποιήθηκε το
tags[1]:"urgent"→"critical" - Προστέθηκε το
tags[3]:"documentation"
Παράδειγμα 3: αφαίρεση στοιχείου από τη μέση ενός πίνακα
Αυτό το παράδειγμα δείχνει τι συμβαίνει όταν ένα στοιχείο αφαιρείται από τη μέση ενός πίνακα, επειδή αποτελεί συχνή πηγή σύγχυσης.
Πρώτο JSON:
1{
2 "products": [
3 { "id": 1, "name": "Laptop", "price": 999.99 },
4 { "id": 2, "name": "Mouse", "price": 24.99 },
5 { "id": 3, "name": "Keyboard", "price": 59.99 }
6 ]
7}
8Δεύτερο JSON, με την εγγραφή «Mouse» διαγραμμένη και μια εγγραφή «Monitor» προστιθέμενη στο τέλος:
1{
2 "products": [
3 { "id": 1, "name": "Laptop", "price": 899.99 },
4 { "id": 3, "name": "Keyboard", "price": 59.99 },
5 { "id": 4, "name": "Monitor", "price": 349.99 }
6 ]
7}
8Κάποιος που θα το έβλεπε αυτό θα έλεγε «Το Mouse αφαιρέθηκε και το Monitor προστέθηκε». Επειδή το εργαλείο συγκρίνει αυστηρά ανά δείκτη, δεν το αντιλαμβάνεται έτσι. Συγκρίνει τον δείκτη 0 με τον δείκτη 0, τον δείκτη 1 με τον δείκτη 1 και τον δείκτη 2 με τον δείκτη 2, οπότε κάθε πεδίο μετά το διαγραμμένο στοιχείο αντιστοιχίζεται στο λάθος αντικείμενο. Το πραγματικό αποτέλεσμα είναι επτά τροποποιήσεις:
- Τροποποιήθηκε το
products[0].price:999.99→899.99 - Τροποποιήθηκε το
products[1].id:2→3 - Τροποποιήθηκε το
products[1].name:"Mouse"→"Keyboard" - Τροποποιήθηκε το
products[1].price:24.99→59.99 - Τροποποιήθηκε το
products[2].id:3→4 - Τροποποιήθηκε το
products[2].name:"Keyboard"→"Monitor" - Τροποποιήθηκε το
products[2].price:59.99→349.99
Για καθαρότερο αποτέλεσμα κατά τη σύγκριση λιστών όπως αυτή, ταξινομήστε και τους δύο πίνακες ή χρησιμοποιήστε το ίδιο κλειδί πριν τους επικολλήσετε, για παράδειγμα γράφοντας κάθε λίστα με την ίδια σειρά ή αντιστοιχίζοντας τα αντικείμενα με βάση ένα πεδίο ID πριν από τη σύγκριση.
Τι δεν κάνει το εργαλείο
- Δεν αντιστοιχίζει τα στοιχεία πινάκων με βάση το περιεχόμενο. Όπως φαίνεται παραπάνω, συγκρίνει αποκλειστικά ανά θέση δείκτη, επομένως δεν μπορεί να αναγνωρίσει ότι ένα στοιχείο μετακινήθηκε αντί να αλλάξει.
- Δεν εντοπίζει κυκλικές αναφορές. Αυτό δεν αποτελεί πρακτικό περιορισμό: και οι δύο είσοδοι προέρχονται από το
JSON.parse, το οποίο δημιουργεί πάντα ένα απλό δέντρο και δεν μπορεί να παράγει τιμή που αναφέρεται στον εαυτό της. Οι κυκλικές αναφορές δεν μπορούν να υπάρχουν εξαρχής σε έγκυρο κείμενο JSON. - Δεν προσφέρει ρύθμιση για ταξινόμηση πινάκων πριν από τη σύγκριση. Η αναδιάταξη των στοιχείων στην είσοδό σας πριν από την επικόλληση είναι ο μόνος τρόπος αποφυγής της επίδρασης μετατόπισης των δεικτών που περιγράφηκε παραπάνω.
Πώς να χρησιμοποιείτε το εργαλείο
- Επικολλήστε το πρώτο έγγραφο JSON στο αριστερό πλαίσιο και το δεύτερο στο δεξί.
- Το εργαλείο τα συγκρίνει αυτόματα μόλις και τα δύο πλαίσια περιέχουν κείμενο ή κάντε κλικ στην επιλογή Compare για να εκτελέσετε τη σύγκριση χειροκίνητα.
- Διαβάστε τη λίστα αποτελεσμάτων. Κάθε γραμμή εμφανίζει μια διαδρομή, όπως
user.age, και αν προστέθηκε, αφαιρέθηκε ή τροποποιήθηκε, με τις παλιές και τις νέες τιμές να εμφανίζονται δίπλα-δίπλα. - Κάντε κλικ στην επιλογή Copy για να αντιγράψετε τα αποτελέσματα ως απλό κείμενο.
Αν ένα πλαίσιο περιέχει κείμενο που δεν είναι έγκυρο JSON, το εργαλείο εμφανίζει σφάλμα κάτω από το συγκεκριμένο πλαίσιο αντί για σύγκριση. Όταν και τα δύο πλαίσια δεν είναι έγκυρα, εμφανίζονται και τα δύο σφάλματα ταυτόχρονα.
Συχνές ερωτήσεις
Τι θεωρείται διαφορά μεταξύ δύο τιμών JSON;
Μια ιδιότητα ή ένα στοιχείο πίνακα διαφέρει αν υπάρχει μόνο σε ένα από τα δύο έγγραφα ή αν υπάρχει και στα δύο αλλά περιέχει διαφορετική τιμή ή διαφορετικό τύπο. Η αλλαγή μιας τιμής από τον αριθμό 5 στη συμβολοσειρά "5" θεωρείται τροποποίηση, παρόλο που μπορεί να φαίνονται παρόμοιες.
Έχει σημασία η σειρά των στοιχείων; Εξαρτάται από τον περιέκτη. Τα αντικείμενα JSON δεν έχουν καθορισμένη σειρά μελών, επομένως δύο αντικείμενα με τα ίδια κλειδιά και τις ίδιες τιμές σε διαφορετική σειρά θεωρούνται ίδια. Οι πίνακες είναι διατεταγμένοι και το εργαλείο τους συγκρίνει ανά θέση δείκτη, επομένως η μετακίνηση ενός στοιχείου σε διαφορετική θέση αναφέρεται ως σειρά τροποποιήσεων και όχι ως μετακίνηση.
Τι σημαίνει μια διαδρομή αποτελέσματος $;
Σημαίνει ότι άλλαξε ολόκληρο το έγγραφο και όχι ένα τμήμα του. Αυτό συμβαίνει όταν οι δύο είσοδοι είναι διαφορετικού είδους τιμές στο ανώτατο επίπεδο, για παράδειγμα ένας πίνακας στη μία πλευρά και ένα αντικείμενο στην άλλη ή οι απλοί αριθμοί 1 και 2. Το $ είναι το αναγνωριστικό ρίζας από το RFC 9535, το πρότυπο JSONPath.
Αποστέλλονται τα δεδομένα JSON μου σε διακομιστή; Όχι. Η σύγκριση εκτελείται στο πρόγραμμα περιήγησης, χρησιμοποιώντας JavaScript. Δεν μεταφορτώνεται τίποτα.
Επηρεάζει το αποτέλεσμα η μορφοποίηση, όπως η εσοχή ή η ελαχιστοποίηση; Όχι. Και οι δύο είσοδοι αναλύονται σε τιμές JSON πριν από τη σύγκριση, επομένως τα κενά διαστήματα, η εσοχή και οι αλλαγές γραμμής δεν έχουν καμία επίδραση. Συγκρίνονται μόνο τα πραγματικά δεδομένα.
Μπορεί το εργαλείο να συγκρίνει JSON με σχόλια ή τελικά κόμματα; Όχι. Το πρότυπο JSON, όπως ορίζεται στο RFC 8259, δεν επιτρέπει σχόλια ή τελικά κόμματα. Η είσοδος που τα περιέχει απορρίπτεται ως μη έγκυρη.
Παραπομπές
- IETF. «Μορφή ανταλλαγής δεδομένων JavaScript Object Notation (JSON)». RFC 8259, Δεκέμβριος 2017.
- IETF. «JavaScript Object Notation (JSON) Patch». RFC 6902, Απρίλιος 2013.
- IETF. «JSONPath: Ερωτήματα για JSON». RFC 9535, Φεβρουάριος 2024. (Η ενότητα 2,2 ορίζει το αναγνωριστικό ρίζας
$.) - Mozilla Developer Network. «JSON.parse()».