JavaScript Object Notation
import std.conv : to; // parse a file or string of json into a usable structure string s = `{ "language": "D", "rating": 3.5, "code": "42" }`; JSONValue j = parseJSON(s); // j and j["language"] return JSONValue, // j["language"].str returns a string writeln(j["language"].str); // "D" writeln(j["rating"].floating); // 3.5 // check a type long x; if (const(JSONValue)* code = "code" in j) { if (code.type() == JSON_TYPE.INTEGER) x = code.integer; else x = to!int(code.str); } // create a json struct JSONValue jj = [ "language": "D" ]; // rating doesnt exist yet, so use .object to assign jj.object["rating"] = JSONValue(3.5); // create an array to assign to list jj.object["list"] = JSONValue( ["a", "b", "c"] ); // list already exists, so .object optional jj["list"].array ~= JSONValue("D"); string jjStr = `{"language":"D","list":["a","b","c","D"],"rating":3.5}`; writeln(jj.toString); // jjStr
String literals used to represent special float values within JSON strings.
string representation of floating-point NaN
string representation of floating-point Infinity
string representation of floating-point negative Infinity
Flags that control how json is encoded and parsed.
standard parsing
encode NaN and Inf float values as strings
encode non ascii characters with an unicode escape sequence
do not escape slashes ('/')
JSON type enumeration
Indicates the type of a JSONValue
.
JSON value node
Returns the JSON_TYPE of the value stored in this structure.
string s = "{ \"language\": \"D\" }"; JSONValue j = parseJSON(s); writeln(j.type); // JSON_TYPE.OBJECT writeln(j["language"].type); // JSON_TYPE.STRING
Value getter/setter for JSON_TYPE.STRING
.
JSONException
for read access if type
is not JSON_TYPE.STRING
.JSONValue j = [ "language": "D" ]; // get value writeln(j["language"].str); // "D" // change existing key to new string j["language"].str = "Perl"; writeln(j["language"].str); // "Perl"
Value getter/setter for JSON_TYPE.INTEGER
.
JSONException
for read access if type
is not JSON_TYPE.INTEGER
.Value getter/setter for JSON_TYPE.UINTEGER
.
JSONException
for read access if type
is not JSON_TYPE.UINTEGER
.Value getter/setter for JSON_TYPE.FLOAT
. Note that despite the name, this is a 64-bit double
, not a 32-bit float
.
JSONException
for read access if type
is not JSON_TYPE.FLOAT
.Value getter/setter for JSON_TYPE.OBJECT
.
JSONException
for read access if type
is not JSON_TYPE.OBJECT
. auto a = &(json.object()); json.uinteger = 0; // overwrite AA pointer (*a)["hello"] = "world"; // segmentation fault
Value getter for JSON_TYPE.OBJECT
. Unlike object
, this retrieves the object by value and can be used in @safe code.
A caveat is that, if the returned value is null
, modifications will not be visible:
JSONValue json; json.object = null; json.objectNoRef["hello"] = JSONValue("world"); assert("hello" !in json.object);
JSONException
for read access if type
is not JSON_TYPE.OBJECT
.Value getter/setter for JSON_TYPE.ARRAY
.
JSONException
for read access if type
is not JSON_TYPE.ARRAY
. auto a = &(json.array()); json.uinteger = 0; // overwrite array pointer (*a)[0] = "world"; // segmentation fault
Value getter for JSON_TYPE.ARRAY
. Unlike array
, this retrieves the array by value and can be used in @safe code.
A caveat is that, if you append to the returned array, the new values aren't visible in the
JSONValue json; json.array = [JSONValue("hello")]; json.arrayNoRef ~= JSONValue("world"); assert(json.array.length == 1);
JSONException
for read access if type
is not JSON_TYPE.ARRAY
.Test whether the type is JSON_TYPE.NULL
Constructor for JSONValue
. If arg
is a JSONValue
its value and type will be copied to the new JSONValue
. Note that this is a shallow copy: if type is JSON_TYPE.OBJECT
or JSON_TYPE.ARRAY
then only the reference to the data will be copied. Otherwise, arg
must be implicitly convertible to one of the following types: typeof(null)
, string
, ulong
, long
, double
, an associative array V[K]
for any V
and K
i.e. a JSON object, any array or bool
. The type will be set accordingly.
JSONValue j = JSONValue( "a string" ); j = JSONValue(42); j = JSONValue( [1, 2, 3] ); writeln(j.type); // JSON_TYPE.ARRAY j = JSONValue( ["language": "D"] ); writeln(j.type); // JSON_TYPE.OBJECT
Array syntax for json arrays.
JSONException
if type
is not JSON_TYPE.ARRAY
.JSONValue j = JSONValue( [42, 43, 44] ); writeln(j[0].integer); // 42 writeln(j[1].integer); // 43
Hash syntax for json objects.
JSONException
if type
is not JSON_TYPE.OBJECT
.JSONValue j = JSONValue( ["language": "D"] ); writeln(j["language"].str); // "D"
Operator sets value
for element of JSON object by key
.
If JSON value
is null
, then operator initializes it with object and then sets value
for it.
JSONException
if type
is not JSON_TYPE.OBJECT
or JSON_TYPE.NULL
.JSONValue j = JSONValue( ["language": "D"] ); j["language"].str = "Perl"; writeln(j["language"].str); // "Perl"
Support for the in
operator.
Tests wether a key can be found in an object.
const(JSONValue)*
that matches to the key, otherwise null
. JSONException
if the right hand side argument JSON_TYPE
is not OBJECT
.JSONValue j = [ "language": "D", "author": "walter" ]; string a = ("author" in j).str;
Implements the foreach opApply
interface for json arrays.
Implements the foreach opApply
interface for json objects.
Implicitly calls toJSON
on this JSONValue.
options
can be used to tweak the conversion behavior.
Implicitly calls toJSON
on this JSONValue, like toString
, but also passes true
as pretty argument.
options
can be used to tweak the conversion behavior
Parses a serialized string and returns a tree of JSON values.
JSONException
if the depth exceeds the max depth. T json
|
json -formatted string to parse |
int maxDepth
| maximum depth of nesting allowed, -1 disables depth checking |
JSONOptions options
| enable decoding string representations of NaN/Inf as float values |
Parses a serialized string and returns a tree of JSON values.
std.json.JSONException
if the depth exceeds the max depth. T json
|
json -formatted string to parse |
JSONOptions options
| enable decoding string representations of NaN/Inf as float values |
Takes a tree of JSON values and returns the serialized string.
Any Object types will be serialized in a key-sorted order.
If pretty
is false
no whitespaces are generated. If pretty
is true
serialized string is formatted to be human-readable. Set the JSONOptions.specialFloatLiterals
flag is set in options
to encode NaN/Infinity as strings.
Exception thrown on JSON errors
© 1999–2017 The D Language Foundation
Licensed under the Boost License 1.0.
https://dlang.org/phobos/std_json.html