Skip to content

mwweissmann/ocaml-json-predicate

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ocaml-json-predicate

This OCaml library implements JSON predicate

JSON Predicates defines a syntax for serializing various predicate expressions as JSON Objects.

Given the following JSON document

{
  "a" : {
    "b" : "foo",
    "c" : {
      "d": 10
    }
  }
}

and the following JSON predicate

{
  "op": "and",
  "apply": [
    {
      "op": "defined",
      "path": "/a/b"
    },
    {
      "op": "less",
      "path": "/a/c/d",
      "value": 15
    }
  ]
}

you can evalute the predicate for the document -- which in this case is valid.

let _ =
  let predicate = Yojson.Safe.from_file the_predicate_file in
  let document = Yojson.Safe.from_file the_document_file in
  let result = Json_predicate.exec_exn predicate document in
  print_endline (if result then "true" else "false")

There is basically only one function exec:

val exec : Yojson.Safe.json ->
    (Yojson.Safe.json -> bool, [> `EInvalid_argument of string]) Result.result

val exec_exn : Yojson.Safe.json -> (Yojson.Safe.json -> bool)

exec predicate document evalutes the JSON predicate predicate on the JSON document document. In case of an error in predicate, Result.Error is returned; else an evaluation function is returned that will verify if the given JSON document meets the predicate. Expressions of the predicate that cannot be evaluated e.g. because of a dangling pointer expression, will evaluate to false. exec_exn behaves identical to exec but raises Invalid_argument in case of an error in the JSON predicate. Both functions can be partially applied to create pre-compiled predicate functions which can be executed multiple times.

The json-pointer library is written by Markus Weissmann.

The source-code of json-predicate is available under the MIT license.