DataSwap Γρήγοροι μετατροπείς αρχείων και δεδομένων, χωρίς εγγραφή

Μετατροπέας XML σε JSON

Επικολλήστε το XML σας παρακάτω και πάρτε JSON στιγμιαία — αναλύεται με το ίδιο το DOMParser του προγράμματος περιήγησης, όχι με έναν χειρόγραφο σαρωτή, οπότε η ένθεση, τα εισαγωγικά και οι οντότητες χειρίζονται ακριβώς όπως θα το έκανε ένας πραγματικός αναλυτής XML. Τίποτα από όσα επικολλάτε δεν φεύγει ποτέ από το πρόγραμμα περιήγησής σας.

Μετατρέψτε XML σε JSON με τον πραγματικό αναλυτή του προγράμματος περιήγησης

Το DOMParser χτίζει ένα πραγματικό δέντρο DOM από το XML σας — το ίδιο δέντρο που θα έχτιζε το πρόγραμμα περιήγησης για ένα πραγματικό έγγραφο — και αυτό το εργαλείο το διατρέχει αναδρομικά αντί να σαρώνει το ακατέργαστο κείμενο για ετικέτες. Ένα στοιχείο με μόνο κειμενικό περιεχόμενο (χωρίς θυγατρικά στοιχεία) γίνεται μια απλή συμβολοσειρά. Ένα στοιχείο με θυγατρικά στοιχεία γίνεται αντικείμενο με ευρετήριο το όνομα ετικέτας του παιδιού. Τα χαρακτηριστικά καταλήγουν κάτω από ένα κλειδί "@attributes" ώστε να μην συγχέονται ποτέ με τα θυγατρικά στοιχεία. Και όταν πολλά παιδιά μοιράζονται ένα όνομα ετικέτας — αδέλφια <item>, καταχωρίσεις λίστας, επαναλαμβανόμενες γραμμές — συγκεντρώνονται σε πίνακα αντί να αντικαθιστούν σιωπηλά το ένα το άλλο, επειδή τα επαναλαμβανόμενα στοιχεία είναι ο κανόνας στο πραγματικό XML, όχι η εξαίρεση.

Πρακτικό παράδειγμα

Είσοδος: <person id="42"><name>Ada Lovelace</name><tag>math</tag><tag>computing</tag></person> (85 χαρακτήρες: ένα χαρακτηριστικό και τρία θυγατρικά στοιχεία, δύο από τα οποία μοιράζονται την ετικέτα tag). Η μετατροπή παράγει:

{
  "@attributes": {
    "id": "42"
  },
  "name": "Ada Lovelace",
  "tag": [
    "math",
    "computing"
  ]
}

— 111 χαρακτήρες. Παρατηρήστε ότι το tag έγινε πίνακας δύο στοιχείων, όχι απλώς "computing" να αντικαθιστά το "math". Τώρα δοκιμάστε το <a><b></a> — η μη κλειστή ετικέτα <b> κάνει αυτό μη έγκυρο XML, και αντί για κενή έξοδο ή μια μπερδεμένη κατάρρευση, αυτό το εργαλείο εμφανίζει ένα μήνυμα σε απλή γλώσσα που σας λέει να ελέγξετε τις ετικέτες σας, επειδή το DOMParser δεν εκτοξεύει σφάλμα σε λανθασμένο XML — επιστρέφει ένα έγγραφο που περιέχει ένα στοιχείο <parsererror>, και αυτό το εργαλείο ελέγχει ακριβώς αυτό. Προτιμάτε να χτίσετε καλά σχηματισμένο XML εξαρχής; Ο Μετατροπέας JSON σε XML αναλαμβάνει την αντίστροφη κατεύθυνση.

Συχνές ερωτήσεις

Τι συμβαίνει όταν πολλά στοιχεία μοιράζονται το ίδιο όνομα ετικέτας;

Συγκεντρώνονται σε έναν πίνακα JSON αντί να αντικαθιστούν το ένα το άλλο. Το πρώτο <item> γίνεται μια τιμή, και τη στιγμή που εμφανίζεται ένα δεύτερο αδελφό <item>, αυτό το κλειδί μετατρέπεται σε πίνακα και και οι δύο τιμές προστίθενται σε αυτόν — έτσι τρία αδελφά <item> γίνονται πίνακας τριών στοιχείων, όχι απλώς το τελευταίο. Αυτό είναι το πιο συνηθισμένο λάθος στη χειρόγραφη μετατροπή XML σε JSON, και γι' αυτό ελέγχουμε αν υπάρχει ήδη ένα κλειδί σε κάθε στοιχείο αντί να υποθέτουμε ότι κάθε όνομα ετικέτας εμφανίζεται μία φορά.

Πού καταλήγουν τα χαρακτηριστικά (attributes) του XML στο JSON;

Κάτω από ένα κλειδί "@attributes" στο αντικείμενο εκείνου του στοιχείου, ώστε να μην συγχέονται ποτέ με τα θυγατρικά στοιχεία — το <price currency="USD">19.99</price> γίνεται {"@attributes":{"currency":"USD"},"#text":"19.99"}. Ένα στοιχείο με χαρακτηριστικά αλλά χωρίς παιδιά ή κείμενο παίρνει μόνο το κλειδί "@attributes" και τίποτα άλλο.

Τι γίνεται αν το XML μου δεν είναι έγκυρο;

Το DOMParser δεν εκτοξεύει σφάλμα JavaScript σε κακοσχηματισμένο XML — αντ' αυτού επιστρέφει σιωπηλά ένα έγγραφο που περιέχει ένα στοιχείο <parsererror>, κάτι εύκολο να το προσπεράσετε αν δεν το ελέγξετε. Αυτό το εργαλείο ελέγχει ακριβώς αυτό και εμφανίζει ένα μήνυμα σε απλή γλώσσα αντί για ένα κενό πλαίσιο ή μια μπερδεμένη κατάρρευση.

Ανεβαίνει το XML μου κάπου;

Όχι. Η ανάλυση γίνεται με το ίδιο το DOMParser του προγράμματος περιήγησης, και το JSON χτίζεται με JSON.stringify — και τα δύο εκτελούνται εξ ολοκλήρου στο πρόγραμμα περιήγησής σας. Τίποτα από όσα επικολλάτε δεν στέλνεται, δεν αποθηκεύεται και δεν καταγράφεται. Αυτό ισχύει για κάθε εργαλείο αυτού του site.

Χειρίζεται αυτό χώρους ονομάτων (namespaces) XML ή τμήματα CDATA;

Τα τμήματα CDATA χειρίζονται σωστά επειδή το DOMParser τα επιλύει με τον ίδιο τρόπο που πρέπει να το κάνει κάθε αναλυτής XML: το περιεχόμενό τους απλώς γίνεται μέρος του κειμένου του στοιχείου, αδιάκριτο από κανονικό κείμενο, που είναι ακριβώς αυτό που λέει η προδιαγραφή XML για ένα τμήμα CDATA. Τα στοιχεία με χώρο ονομάτων διατηρούν το όνομα ετικέτας τους με πρόθεμα (όπως ns:tag) ως κλειδί JSON, οπότε τίποτα δεν απορρίπτεται σιωπηλά — αυτό το εργαλείο δεν κάνει ξεχωριστή επίλυση με βάση τον χώρο ονομάτων πέρα από αυτό.