fn fromJson
Decodes canonical JSON text.
Example:
use std.ser { fromJson }
data User { name: str; age: i32 }
fn main() io {
let u: User = fromJson(&"{{\"name\":\"bob\",\"age\":25}}")!
print("{u.name} {u.age}")
}Вывод
bob 25
Примеры#
Разбор JSON с проверкой типов и уточнений.
Строгий разбор#
Отсутствующее поле без значения по умолчанию, неверный тип, значение вне диапазона уточнённого типа и неверный синтаксис дают DecodeError; поле со значением по умолчанию можно опустить.
use std.ser { fromJson }
type Port = u16 where 1..=65535
data Server { host: str; port: Port; tls: bool = false } // у поля есть значение по умолчанию
fn load(text: str) -> str {
match fromJson<Server>(&text) {
Server s => "ok {s.host}:{s.port} tls={s.tls}"
DecodeError => "invalid"
}
}
fn main() io {
print(load("{{\"host\":\"a\",\"port\":8080}}"))
print(load("{{\"host\":\"a\",\"port\":8080,\"tls\":true}}"))
print(load("{{\"host\":\"a\",\"port\":0}}")) // уточнённый тип отвергает 0 при разборе
print(load("{{\"host\":\"a\",\"port\":70000}}"))
print(load("{{\"port\":80}}"))
print(load("[]"))
}Вывод
ok a:8080 tls=false ok a:8080 tls=true invalid invalid invalid invalid
pub(api) fn fromJson<T: Serializable>(s: &str) -> T | DecodeErrorС версии. 1.0.0-beta
Параметры
| Имя | Тип |
|---|---|
s | &str |
Возвращает
T
Ошибки
DecodeError@error
Эффекты
не объявлены (чистая, пока тело не говорит иное)
Определено в: std/ser/ser.oxl:2407