Μετατροπέας JSON σε XML
Επικολλήστε το JSON σας παρακάτω και πάρτε καλά σχηματισμένο XML
στιγμιαία — χτισμένο με τις ίδιες τις APIs του DOM του
προγράμματος περιήγησης (createElement, appendChild, XMLSerializer), όχι με
συνένωση συμβολοσειρών, οπότε οι ειδικοί χαρακτήρες διαφεύγουν
αυτόματα. Τίποτα από όσα επικολλάτε δεν φεύγει ποτέ από το
πρόγραμμα περιήγησής σας.
Χτίστε XML με τις ίδιες τις APIs στοιχείων του DOM, όχι με συνένωση συμβολοσειρών
Αυτό το εργαλείο δεν συναρμολογεί ποτέ XML κολλώντας
συμβολοσειρές μεταξύ τους — αντ' αυτού καλεί το document.implementation.createDocument() για να
χτίσει ένα πραγματικό XML Document, μετά createElement και appendChild για να
το μεγαλώσει, και παραδίδει το τελικό δέντρο στο new XMLSerializer().serializeToString(doc). Αυτό
έχει σημασία επειδή το κειμενικό περιεχόμενο που ανατίθεται μέσω el.textContent διαφεύγει αυτόματα και σωστά από το
πρόγραμμα περιήγησης — ένα & στα δεδομένα σας
γίνεται & στην έξοδο χωρίς αυτό το εργαλείο
να χρειάζεται να το θυμηθεί μόνο του. Τα κλειδιά αντικειμένων
γίνονται ονόματα ετικέτας θυγατρικών στοιχείων. Οι τιμές πινάκων
δεν παίρνουν ποτέ στοιχείο-περιέκτη: κάθε στοιχείο επαναλαμβάνει
το κλειδί του πίνακα ως αδελφό — ένας πίνακας "tags" με δύο καταχωρίσεις παράγει δύο αδελφά
στοιχεία <tags>, όχι ένα <tags> που περιέχει μια λίστα. Οι πρωτογενείς
τιμές (συμβολοσειρές, αριθμοί, boolean) γίνονται το κειμενικό
περιεχόμενο του στοιχείου, και όλα τυλίγονται σε ένα ριζικό
στοιχείο που μπορείτε να ονομάσετε εσείς οι ίδιοι.
Πρακτικό παράδειγμα
Είσοδος: {"person":{"name":"O'Brien & Co.","tags":["a","b"]}}
— μια απόστροφος και ένα & σε ένα όνομα, και ένας πίνακας δύο
στοιχείων. Η μετατροπή παράγει:
<root>
<person>
<name>O'Brien & Co.</name>
<tags>a</tags>
<tags>b</tags>
</person>
</root>
Παρατηρήστε ότι το & έγινε & αυτόματα — αυτό το κάνει το XMLSerializer, όχι κάποιος χειρόγραφος κανόνας
αντικατάστασης — και το tags παρήγαγε δύο αδελφά
στοιχεία αντί για ένα στοιχείο που συμπτύσσει και τις δύο τιμές
σε μία γραμμή. Τώρα δοκιμάστε ένα κλειδί που δεν μπορεί να είναι
όνομα ετικέτας, όπως {"1η θέση": "χρυσό"} — αντί
να εκπέμψει χαλασμένο XML, αυτό το εργαλείο σας λέει ακριβώς
ποιο κλειδί απέτυχε και γιατί. Χρειάζεστε την αντίστροφη
κατεύθυνση; Ο Μετατροπέας XML σε JSON
αναλύει πραγματικό XML και το μετατρέπει σε JSON χρησιμοποιώντας
το ίδιο το DOMParser του προγράμματος περιήγησης.
Συχνές ερωτήσεις
Πώς μετατρέπεται ένας πίνακας JSON σε XML; Παίρνω ένα στοιχείο-περιέκτη;
Χωρίς περιέκτη — κάθε στοιχείο του πίνακα γίνεται δικό του αδελφό στοιχείο που επαναλαμβάνει το κλειδί του πίνακα. Το {"tag":["math","computing"]} γίνεται <tag>math</tag><tag>computing</tag>, όχι ένα στοιχείο <tag> που περιέχει δύο παιδιά. Αυτό αντικατοπτρίζει τον τρόπο με τον οποίο γράφεται πραγματικά το XML στην πράξη: επαναλαμβανόμενα αδελφά στοιχεία, όχι ένα μοναδικό στοιχείο που τυλίγει μια λίστα. Ένας πίνακας JSON ανώτατου επιπέδου χωρίς κλειδί (χωρίς αντικείμενο-περιέκτη) χρησιμοποιεί το όνομα στοιχείου "item" για κάθε καταχώριση, αφού δεν υπάρχει κλειδί προς επανάληψη σε εκείνο το επίπεδο.
Τι γίνεται αν ένα από τα κλειδιά JSON μου δεν είναι έγκυρο όνομα στοιχείου XML;
Απορρίπτεται με ένα σαφές μήνυμα αντί να παράγει σιωπηλά χαλασμένο XML. Τα ονόματα στοιχείων πρέπει να ξεκινούν με γράμμα ή κάτω παύλα και να περιέχουν μόνο γράμματα, αριθμούς, κάτω παύλες, ενωτικά και τελείες — χωρίς αρχικό ψηφίο, χωρίς κενά, χωρίς άνω-κάτω τελεία. Ένα κλειδί όπως "1η θέση" ή "πλήρες όνομα" αποτυγχάνει αμέσως σε αυτόν τον έλεγχο, πριν χτιστεί οποιοδήποτε στοιχείο, και το μήνυμα σφάλματος αναφέρει ακριβώς ποιο κλειδί απέτυχε.
Μπορώ να αλλάξω το όνομα του ριζικού στοιχείου;
Ναι — το πεδίο "Ριζικό στοιχείο" πάνω από την είσοδο το ελέγχει, και προεπιλέγει το "root" αν το αφήσετε κενό. Περνάει από ακριβώς τον ίδιο έλεγχο εγκυρότητας με κάθε άλλο κλειδί, οπότε ένα μη έγκυρο ριζικό όνομα απορρίπτεται με τον ίδιο τρόπο που θα απορριπτόταν ένα μη έγκυρο κλειδί αντικειμένου.
Τι συμβαίνει με τις τιμές null, τα κενά αντικείμενα και τους κενούς πίνακες;
Μια τιμή null γίνεται ένα κενό στοιχείο — <middleName/> αντί για μια κυριολεκτική συμβολοσειρά όπως "null". Ένα κενό αντικείμενο {} γίνεται επίσης κενό στοιχείο, αφού δεν έχει κλειδιά προς μετατροπή σε παιδιά. Ένας κενός πίνακας [] δεν παράγει κανένα στοιχείο για εκείνο το κλειδί, επειδή υπάρχουν μηδέν στοιχεία προς επανάληψη — αυτή είναι η άμεση συνέπεια του ότι οι πίνακες δεν παίρνουν στοιχείο-περιέκτη.
Ανεβαίνει το JSON μου κάπου;
Όχι. Το XML χτίζεται εξ ολοκλήρου στο πρόγραμμα περιήγησής σας χρησιμοποιώντας τις ίδιες τις APIs του DOM — document.implementation.createDocument(), createElement και XMLSerializer — τίποτα από όσα επικολλάτε δεν στέλνεται, δεν αποθηκεύεται και δεν καταγράφεται σε server. Αυτό ισχύει για κάθε εργαλείο αυτού του site.