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