package mjson

  1. Overview
  2. Docs
Composable, applicative and monadic DSL for decoding Yojson values

Install

Dune Dependency

Authors

Maintainers

Sources

mjson-0.1.1.tbz
sha256=e077985e1f5efc8b527b02f1b4ed13e6419b437fd567ee578d562e11e45f2c9c
sha512=295c973c558448d63e5c9d98b3cf4a636bbf6882b6c53bcd91b54f82bb591d28a330bbfa6df9654f896f85a3df1d6189ac0978a86cf8720d81c5726482729205

Description

Composable, applicative and monadic DSL for decoding Yojson values

Published: 31 Oct 2023

README

README.md

mjson is a small OCaml library for decoding JSON values from more low-level JSON libraries such as Yojson.

It is just a thin layer on top of Yojson (Safe and Basic).

Examples

type person =
  { name : string
  ; age : int
  }

let make_person name age = { name; age }

(* (monadic) decoder for Yojson.Safe.t values into a person. *)
let person_decoder =
  let open Mjson.Decoder.Yojson.Safe in
  let open Mjson.Decoder.Yojson.Safe.Syntax in
  (* decode the field "name" into a string *)
  let* name = field "name" string in
  (* decode the field "age" into an int *)
  let* age = field "age" int in
  (* if all went well [return] the person (or any error that might have
     occured along the way. *)
  return @@ make_person name age
  ;;

Example utop session

utop # person_decoder @@ `Assoc [ "name", `String "Ursula"; "age", `Float 88.0];;
- : (person, Mjson.Decoder.Yojson.Safe.Error.t) result =
Ok {name = "Ursula"; age = 88}

utop # person_decoder @@ `Assoc [ "name", `String "Ursula"; "age", `Bool true];;
- : (person, Mjson.Decoder.Yojson.Safe.Error.t) result =
Error
 (Mjson.Decoder.Yojson.Safe.Error.Field ("age",
   Mjson.Decoder.Yojson.Safe.Error.Failure ("not an int", `Bool true)))


See the tests for more examples.

Building the Code

This packages comes with a nix DevShell. All commands are intended for use within the provided (default) devShell.

$ make repl   # opens a utop repl with the project loaded
$ make test   # runs all tests
$ make doc    # generate all documentation

Dependencies (5)

  1. ppx_deriving
  2. alcotest
  3. yojson >= "2.0.0"
  4. dune >= "3.11"
  5. ocaml >= "4.08.0"

Dev Dependencies (1)

  1. odoc with-doc

Used by

None

Conflicts (1)

  1. result < "1.5"