7.1 library(http/json): Reading and writing JSON serialization
AllApplicationManualNameSummaryHelp

  • Documentation
    • Reference manual
    • Packages
      • SWI-Prolog HTTP support
        • Supporting JSON
          • library(http/json): Reading and writing JSON serialization
            • atom_json_term/3
            • json_read/2
            • json_read/3
            • json_write/2
            • json_write/3
            • json_write_hook/4
            • json_dict_pairs/2
            • is_json_term/1
            • is_json_term/2
            • json_read_dict/2
            • json_read_dict/3
            • json_write_dict/2
            • json_write_dict/3
            • atom_json_dict/3
Availability::- use_module(library(http/json)).
Source[det]json_read(+Stream, -Term)
[det]json_read(+Stream, -Term, +Options)
Read next JSON value from Stream into a Prolog term. The canonical representation for Term is:

  • A JSON object is mapped to a term json(NameValueList), where NameValueList is a list of Name=Value. Name is an atom created from the JSON string.
  • A JSON array is mapped to a Prolog list of JSON values.
  • A JSON string is mapped to a Prolog atom
  • A JSON number is mapped to a Prolog number
  • The JSON constants true and false are mapped -like JPL- to @(true) and @(false).
  • The JSON constant null is mapped to the Prolog term @(null)

Here is a complete example in JSON and its corresponding Prolog term.

{ "name":"Demo term",
  "created": {
    "day":null,
    "month":"December",
    "year":2007
  },
  "confirmed":true,
  "members":[1,2,3]
}
json([ name='Demo term',
       created=json([day= @null, month='December', year=2007]),
       confirmed= @true,
       members=[1, 2, 3]
     ])

The following options are processed:

null(+NullTerm)
Term used to represent JSON null. Default @(null)
true(+TrueTerm)
Term used to represent JSON true. Default @(true)
false(+FalseTerm)
Term used to represent JSON false. Default @(false)
end_of_file(+ErrorOrTerm)
If end of file is reached after skipping white space but before any input is processed take the following action (default error):

  • If ErrorOrTerm == error, throw an unexpected end of file syntax error
  • Otherwise return ErrorOrTerm.

Returning an status term is required to process Concatenated JSON. Suggested values are @(eof) or end_of_file.

value_string_as(+Type)
Prolog type used for strings used as value. Default is atom. The alternative is string, producing a packed string object. Please note that codes or chars would produce ambiguous output and are therefore not supported.
See also
json_read_dict/3 to read a JSON term using the version 7 extended data types.