47 lines
1 KiB
Markdown
47 lines
1 KiB
Markdown
# json 🐑
|
|
|
|
Work with JSON in Gleam!
|
|
|
|
## Installation
|
|
|
|
```shell
|
|
gleam add gleam_json@3
|
|
```
|
|
|
|
## Encoding
|
|
|
|
```gleam
|
|
import myapp.{type Cat}
|
|
import gleam/json
|
|
|
|
pub fn cat_to_json(cat: Cat) -> String {
|
|
json.object([
|
|
#("name", json.string(cat.name)),
|
|
#("lives", json.int(cat.lives)),
|
|
#("flaws", json.null()),
|
|
#("nicknames", json.array(cat.nicknames, of: json.string)),
|
|
])
|
|
|> json.to_string
|
|
}
|
|
```
|
|
|
|
## Parsing
|
|
|
|
JSON is parsed into a `Dynamic` value which can be decoded using the
|
|
`gleam/dynamic/decode` module from the Gleam standard library.
|
|
|
|
```gleam
|
|
import myapp.{Cat}
|
|
import gleam/json
|
|
import gleam/dynamic/decode
|
|
|
|
pub fn cat_from_json(json_string: String) -> Result(Cat, json.DecodeError) {
|
|
let cat_decoder = {
|
|
use name <- decode.field("name", decode.string)
|
|
use lives <- decode.field("lives", decode.int)
|
|
use nicknames <- decode.field("nicknames", decode.list(decode.string))
|
|
decode.success(Cat(name:, lives:, nicknames:))
|
|
}
|
|
json.parse(from: json_string, using: cat_decoder)
|
|
}
|
|
```
|