protocol

# `json_protocol`

JSON parser and generator protocol.

Availability:
`logtalk_load(json(loader))`
Author: Paulo Moura and Jacinto Dávila
Version: 1:0:0
Date: 2026-07-05
Compilation flags:
`static`
Dependencies:
(none)
Remarks:
(none)
Inherited public predicates:
(none)

## Public predicates

### `parse/2`

Parses the JSON contents read from the given source (`codes(List)`, `stream(Stream)`, `line(Stream)`, `file(Path)`, `chars(List)`, or `atom(Atom)`) into a term.

Compilation flags:
`static`
Template:
`parse(Source,Term)`
Mode and number of proofs:
`parse(++compound,--term)` - `one_or_error`
Exceptions:
`Source` is a variable:
`instantiation_error`
`Source` is neither a variable nor a valid JSON source term:
`domain_error(json_source,Source)`
`Source` is a valid JSON source term but does not contain parsable JSON:
`domain_error(json,Source)`

### `generate/2`

Generates the content using the representation specified in the first argument (`codes(List)`, `stream(Stream)`, `file(Path)`, `chars(List)`, or `atom(Atom)`) for the term in the second argument. Fails if this term cannot be processed.

Compilation flags:
`static`
Template:
`generate(Sink,Term)`
Mode and number of proofs:
`generate(+compound,++term)` - `one_or_error`
Exceptions:
`Sink` is a variable:
`instantiation_error`
`Sink` is neither a variable nor a valid JSON sink term:
`domain_error(json_sink,Sink)`
A JSON version of `Term` cannot be generated by the implementation:
`domain_error(json_term,Term)`

## Protected predicates

(none)

## Private predicates

(none)

## Operators

(none)