:- use_module(library(http/json)). [det]json_write(+Stream, 
+Term)
[det]json_write(+Stream, 
+Term)Values can be of the form #(Term), which causes Term to be stringified if it is not an atom or string. Stringification is based on term_string/2.
Rational numbers are emitted as floating point numbers. The hook json_write_hook/4 can be used to realize domain specific alternatives.
The version 7 dict type is supported as well. Optionally, if 
the dict has a tag, a property "type":"tag" can be added to the 
object. This behaviour can be controlled using the tag 
option (see below). For example:
?- json_write(current_output, point{x:1,y:2}).
{
  "x":1,
  "y":2
}
?- json_write(current_output, point{x:1,y:2}, [tag(type)]).
{
  "type":"point",
  "x":1,
  "y":2
}
In addition to the options recognised by json_read/3, we process the following options are recognised:
true (default false), serialize unknown 
terms and print them as a JSON string. The default raises a type error. 
Note that this option only makes sense if you can guarantee that the 
passed value is not an otherwise valid Prolog representation of a Prolog 
term.
If a string is emitted, the sequence </ is emitted as
<\/. This is valid JSON syntax which ensures that JSON 
objects can be safely embedded into an HTML <script> 
element.