Μετάβαση στο περιεχόμενο
Ελληνικά

Αναφορά 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"}
Ku
8

Ένα αναλυμένο 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 C διαθέτουν υλοποιήσεις JSON. Το περιορισμένο εγγενές υποσύνολο Task και το LLVM δεν υποστηρίζουν JSON. Οι εισαγωγές του προεπιλεγμένου εκκινητή εξακολουθούν να εξαρτώνται από τις θέσεις πηγής· η υποστήριξη JSON δεν συνεπάγεται πλήρως ανεξάρτητο πακέτο.

Οι υπογραφές και τα όρια αυτής της σελίδας ελέγχθηκαν με πηγές και συμβάσεις. Η επαλήθευση εκτέλεσης πρέπει να ονομάζει έκδοση, commit και backend. Δείτε την πλήρη σύμβαση σύνταξης JSON.