Αναφορά JSON
Οι νέες πληροφορίες για τη v0.0.18 ακολουθούν προς το παρόν στα αγγλικά· η υπόλοιπη μετάφραση διατηρείται. English · 简体中文
json.encode / json.decode are available in v0.0.18 and share the stringify / parse implementations. Compatibility names remain available. The previous JSON implementation remains the default; yyjson is not used.
Εισαγωγή και διεπαφές
Ενότητα με τίτλο «Εισαγωγή και διεπαφές»import json from "std.json"| Διεπαφή | Επιστρέφει | Σημασία |
|---|---|---|
json.stringify(&value:any) |
str! |
Κωδικοποίηση μόνο για ανάγνωση σε νέο συμπαγές κείμενο JSON |
json.parse(text:str) |
KuValue! |
Αυστηρή ανάλυση σε δυναμική τιμή με ανεξάρτητη κυριότητα |
json.try_parse(text:str) |
KuValue! |
Ψευδώνυμο συμβατότητας για το parse |
json.encode(&value:any) |
str! |
Ψευδώνυμο του stringify στον κλάδο ανάπτυξης |
json.decode(text:str) |
KuValue! |
Ψευδώνυμο του parse στον κλάδο ανάπτυξης |
Το ! δηλώνει Result. Χρησιμοποιήστε ? για προώθηση σφαλμάτων ή try/catch για χειρισμό τους. Η κωδικοποίηση δεν καταναλώνει ούτε τροποποιεί την είσοδο.
Κωδικοποίηση και ανάγνωση τιμών
Ενότητα με τίτλο «Κωδικοποίηση και ανάγνωση τιμών»Αυτό είναι πλήρες βασικό παράδειγμα. Ο κλάδος ανάπτυξης έχει ευρύτερο παράδειγμα ελέγχου παλινδρόμησης στο examples/json.ku.
import json from "std.json"
fn main(): null! { value = { name: "Ku", count: 7 } text = json.stringify(value)? println(text)
decoded = json.parse(text)? println(decoded["name"]?.as_str()?) println(decoded["count"]?.as_int()? + 1) return ok(null)}Τα κλειδιά αντικειμένου ταξινομούνται ντετερμινιστικά. Αναμενόμενη έξοδος:
{"count":7,"name":"Ku"}Ku8Ένα αναλυμένο KuValue δεν μπορεί να συμμετέχει άμεσα σε ακέραια αριθμητική. Πρώτα μετατρέψτε με .as_int()? ή .as_str()?. Ασύμβατος τύπος επιστρέφει σφάλμα. Απόντα κλειδιά αντικειμένου επιστρέφουν επίσης σφάλματα αντί για αυτόματες προεπιλογές.
Δεδομένα και όρια
Ενότητα με τίτλο «Δεδομένα και όρια»Οι υποστηριζόμενες είσοδοι περιλαμβάνουν συμβολοσειρές, λογικές τιμές, ακεραίους, πεπερασμένους αριθμούς κινητής υποδιαστολής, null, εμφωλευμένους πίνακες, αντικείμενα με κλειδιά συμβολοσειρών και αναπαραστάσιμες δομές. Συναρτήσεις, Tasks, χειριστήρια πόρων, Results, απαριθμήσεις και κύκλοι δεν κωδικοποιούνται.
| Κανόνας | Τρέχουσα υλοποίηση |
|---|---|
| Σύνταξη JSON | Αυστηρή· απορρίπτει σχόλια, τελικά κόμματα, πρόσθετη είσοδο μετά την τιμή και μη έγκυρο Unicode |
| Είσοδος / έξοδος | Καθεμία περιορίζεται σε 1.000.000 byte |
| Προϋπολογισμός βάθους | Η ρίζα έχει βάθος 0· απορρίπτει depth > 32· δέχεται 33 επίπεδα κενών περιεκτών, απορρίπτει 34 |
| Ακέραιοι | Προσημασμένοι 64 bit· η υπερχείλιση είναι σφάλμα, χωρίς αυτόματη μετατροπή σε float |
| Κινητή υποδιαστολή | Πεπερασμένο binary64· δεν διατηρούνται η αρχική γραφή, οι ετικέτες float και το αρνητικό μηδέν |
| Unicode | Κινεζικά, emoji, ακολουθίες διαφυγής, ενσωματωμένο NUL |
| Διπλά κλειδιά αντικειμένου | Η ανάλυση κρατά την τελευταία τιμή |
| Σειρά κλειδιών | Η κωδικοποίηση ταξινομεί βάσει σειράς byte UTF-8 |
A float such as 1.0 may encode as 1. When an integer-looking float is outside int64, the encoder adds .0 to keep decoding on the float path: 1e20 encodes as 100000000000000000000.0 and decodes again. Finite binary64 values do not preserve original spelling, a float tag or the sign of negative zero.
Σφάλματα
Ενότητα με τίτλο «Σφάλματα»Τα ανακτήσιμα σφάλματα χρησιμοποιούν τον τομέα json. Συνήθεις κωδικοί είναι parse_error, stringify_error και out_of_memory. Το byte N σε μήνυμα ανάλυσης είναι μετατόπιση byte UTF-8 με αρχή το μηδέν. Δείτε τα σφάλματα και την αντιμετώπιση προβλημάτων για ελάχιστο χειριστή μη έγκυρης εισόδου.
Υποστήριξη backend
Ενότητα με τίτλο «Υποστήριξη backend»Ο διερμηνευτής, ο προεπιλεγμένος συσκευασμένος εκκινητής και ο σύγχρονος εγγενής backend C διαθέτουν υλοποιήσεις JSON. Το περιορισμένο εγγενές υποσύνολο Task και το LLVM δεν υποστηρίζουν JSON. Οι εισαγωγές του προεπιλεγμένου εκκινητή εξακολουθούν να εξαρτώνται από τις θέσεις πηγής· η υποστήριξη JSON δεν συνεπάγεται πλήρως ανεξάρτητο πακέτο.
Οι υπογραφές και τα όρια αυτής της σελίδας ελέγχθηκαν με πηγές και συμβάσεις. Η επαλήθευση εκτέλεσης πρέπει να ονομάζει έκδοση, commit και backend. Δείτε την πλήρη σύμβαση σύνταξης JSON.