OxL Справочник OxL
РусскийEnglish

fn fromJson

Decodes canonical JSON text.

Example:

oxl✓ проверяется в CI
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; поле со значением по умолчанию можно опустить.

oxl✓ проверяется в CI
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

Ошибки

Эффекты

не объявлены (чистая, пока тело не говорит иное)

Определено в: std/ser/ser.oxl:2407

См. также

OxL 1.0.0-beta · Версия документации 1.0.0-beta© OxwaldLink · сгенерировано из Стандарта, исходников std и руководства