Slide 23 de 37

JSON

Codificando, e decodificando em um tipo declarado
type Greeting { name: Str }

proc main(): void {
	body := hive.json.encode(Greeting("ada"))
	echo body

	parsed := hive.json.parse(body) with Greeting
	if parsed is Result.Ok(g) {
		echo "olá, {g.name}!"
	}
}
Decodificando em uma Table
type Greeting { name: Str }

proc main(): void {
	body := hive.json.encode(Greeting("ada"))

	asTable := hive.json.parse(body) with Table
	if asTable is Result.Ok(table) {
		if hive.json.get(table, "name") is Result.Ok(name) {
			echo name
		}
	}
}
hive.json trata uma declaração de tipo Hive como o próprio schema JSON. parse(text) with T deriva um decodificador para T em tempo de compilação e devolve um Result cujo Error carrega o caminho exato que falhou ao decodificar; parse(text) with Table, em vez disso, achata o documento inteiro em linhas [caminho, valor], que hive.json.get consulta por um caminho separado por pontos. encode(value) deriva o codificador a partir do tipo estático, então nunca pode falhar — não há Result para checar na saída. table(text) lê um array JSON de objetos simples como uma Table com cabeçalho.