Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 8278|Απάντηση: 1

[JavaScript] Το Front-end JS λύνει το πρόβλημα της απώλειας της ακρίβειας σειριοποίησης JSON

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 13/2/2022 2:37:43 μ.μ. | | | |
Απαιτήσεις: Έφτιαξα μια διαδικτυακή σελίδα ανάλυσης για το jwt, όταν το περιεχόμενο jwt έχει μεγάλο τύπο, η χρήση της προεπιλεγμένης μεθόδου JSON για ανάλυση θα προκαλέσει απώλεια ακρίβειας, όπως φαίνεται στο παρακάτω σχήμα:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiaXRzdnNlLmNvbSIsImlkIjo4OTA2MTM1NDg4MDEwNzc5Mjg1fQ.7tJHcSfbpZkgqw0ALGSRxyqkz2-UxZPhO_12TuKNZus



Η JavaScript έχει μόνο έναν τύπο αριθμού: Αριθμός, Αριθμός είναι ένας αριθμός κινητής υποδιαστολής διπλής ακρίβειας και σε αντίθεση με πολλές άλλες γλώσσες προγραμματισμού, η JavaScript δεν ορίζει διαφορετικούς τύπους αριθμών, όπως ακέραιους αριθμούς, βραχείς, μεγάλους, κινητής υποδιαστολής κ.λπ. Επομένως, στη JavaScript, οι αριθμοί δεν χωρίζονται σε ακέραιους τύπους και τύπους κινητής υποδιαστολής και όλοι οι αριθμοί είναι τύποι κινητής υποδιαστολής.

Όταν εκφράζουμε έναν ακέραιο, ο Αριθμός μπορεί να αντιπροσωπεύει ένα ακέραιο εύρος [−2 στη δύναμη του 53, 2 στη δύναμη του 253]. Επειδή ο αριθμός έχει 8 byte και 64 bit, συμπεριλαμβανομένου 1 bit προσήμου, 11 εκθετικών bit και 52 ψηφίων mantissa.

Μπορείτε να χρησιμοποιήσετε το Number.MAX_SAFE_INTEGER και το Number.MIN_SAFE_INTEGER για να δείτε τους μέγιστους και ελάχιστους ακέραιους αριθμούς ασφαλείας

Όταν η διεπαφή backend επιστρέφει ένα πεδίο τύπου long, το frontend χρησιμοποιεί το JSON.parse(text) για να αποσειριοποιήσει την οθόνη, κάτι που θα προκαλέσει σφάλμα εμφάνισης και η λύση είναι ότι η διεπαφή backend μετατρέπει το πεδίο τύπου long σε τύπο συμβολοσειράς και το επιστρέφει.

Lossless-JSON project, αναλύοντας το JSON χωρίς τον κίνδυνο απώλειας αριθμητικών πληροφοριών. Διεύθυνση GitHub:Η σύνδεση με υπερσύνδεσμο είναι ορατή.

Πρώτα απ' όλαΚλωνοποιήστε το έργο json χωρίς απώλειεςγια να δημιουργήσετε μια ομαδοποιημένη και ελαχιστοποιημένη βιβλιοθήκη (ES5, ο υπολογιστής πρέπει να εγκαταστήσει node.js) και πρώτα να εγκαταστήσετε τις εξαρτήσεις:

Στη συνέχεια, μεταγλωττίστε ως εξής:



./dist/lossless-json.js Αυτό θα δημιουργήσει ένα πακέτο συμβατότητας ES5 που μπορεί να εκτελεστεί στο πρόγραμμα περιήγησης και node.js.

Δοκιμασμένο μέσω της κονσόλας του προγράμματος περιήγησης ως εξής:



Τροποποιήστε τον κώδικα του έργου,Εισαγωγή lossless-json.js αρχείων, καλώντας το LosslessJSON για σειριοποίηση και αποσειριοποίηση JSON,Διορθώθηκε το πρόβλημα απώλειας ακρίβειας, όπως φαίνεται στο παρακάτω σχήμα:

let json = LosslessJSON.parse('{"foo":"bar"}'); {foo: 'μπαρ'}
έστω κείμενο = LosslessJSON.stringify(json);        '{"foo":"μπαρ"}'



Διεύθυνση δοκιμής:Η σύνδεση με υπερσύνδεσμο είναι ορατή.

Τέλος, επισυνάψτε το μεταγλωττισμένο αρχείο lossless-json.js:
Τουρίστες, αν θέλετε να δείτε το κρυφό περιεχόμενο αυτής της ανάρτησης, παρακαλώΑπάντηση

(Τέλος)




Προηγούμενος:[Πραγματική μάχη]. Το NET/C# εξάγει την προσωρινή μνήμη χρησιμοποιώντας το ασαφές ερώτημα StackExchange.Redis
Επόμενος:[Εξάσκηση] Η Java δεν μπορεί να εντοπίσει προσαρμοσμένες εξαιρέσεις χρησιμοποιώντας την αντανάκλαση hutool
Δημοσιεύτηκε στις 13/2/2022 4:28:40 μ.μ. |
Ελάτε να μάθετε ξανά...
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com