width(0)option gives a big performance improvement (2-3x by my rough measurements).=
|Did you know ...||Search Documentation:|
|library(http/http_json): HTTP JSON Plugin module|
json.pldescribes how JSON objects are represented in Prolog terms.
json_convert.plconverts between more natural Prolog terms and json terms.
Most code doesn't need to use this directly; instead use
library(http/http_server), which combines this library with
the typical HTTP libraries that most servers need.
This module adds hooks to several parts of the HTTP libraries, making them JSON-aware. Notably:
application/jsonrequestcontent to a JSON term.
post(json(Term))to issue a POST request with JSON content.
Acceptheader prefers application/json over text/html.
Typically JSON is used by Prolog HTTP servers. This module supports two JSON representations: the classical representation and the new representation supported by the SWI-Prolog version 7 extended data types. Below is a skeleton for handling a JSON request, answering in JSON using the classical interface.
handle(Request) :- http_read_json(Request, JSONIn), json_to_prolog(JSONIn, PrologIn), <compute>(PrologIn, PrologOut), % application body prolog_to_json(PrologOut, JSONOut), reply_json(JSONOut).
When using dicts, the conversion step is generally not needed and the code becomes:
handle(Request) :- http_read_json_dict(Request, DictIn), <compute>(DictIn, DictOut), reply_json(DictOut).
This module also integrates JSON support into the http client
http_client.pl. Posting a JSON query and
processing the JSON reply (or any other reply understood by http_read_data/3)
is as simple as below, where Term is a JSON term as described in
and reply is of the same format if the server replies with JSON.
..., http_post(URL, json(Term), Reply, )
dict. If the value is
dict, json_read_dict/3 is used.
|MediaType||is a term Type/SubType, where both Type and SubType are atoms.|
http_post(URL, json(Term), Reply, Options) http_post(URL, json(Term, Options), Reply, Options)
If Options are passed, these are handed to json_write/3. In addition, this option is processed:
dict, json_write_dict/3 is used to write the output. This is default if
term(default) to generate a classical Prolog term or
dictto exploit the SWI-Prolog version 7 data type extensions. See json_read_dict/3.
domain_error(mimetype, Found)if the mimetype is not known (see json_type/1).
domain_error(method, Method)if the request method is not a
charset=UTF8should not be required because JSON is defined to be UTF-8 encoded, but some clients insist on it.
term(classical json representation) or
dictto use the new dict representation. If omitted and Term is a dict,
dictis assumed. SWI-Prolog Version 7.