std.json
JavaScript Object Notation
- Лицензия:
- Boost License 1.0.
- Авторы:
- Jeremie Pelletier, David Herberth
- Ссылки
- http://json.org/, http://seriot.ch/parsing_json.html
- Исходный код
- std/json.d
- Примеры:
-
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() == JSONType.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
- Перечисление JSONFloatLiteral: строка;
-
Строковые литералы, используемые для представления специальных значений с плавающей точкой в JSON-строках.
- nan
-
строковое представление числового NaN
- inf
-
строковое представление бесконечности с плавающей точкой
- negativeInf
-
строковое представление отрицательной бесконечности с плавающей точкой
- Перечисление JSONOptions: целое число;
-
Флаги, контролирующие, как JSON кодируется и парсится.
- none
-
стандартный парсинг
- specialFloatLiterals
-
кодирование значений NaN и Inf с плавающей точкой как строк
- escapeNonAsciiChars
-
кодирование символов, не входящих в ASCII, с помощью последовательности экранирования Unicode
- doNotEscapeSlashes
-
не экранировать косые черты ('/')
- strictParsing
-
Строгое следование грамматике RFC-8259 при парсинге
- Перечисление JSONType: байт;
-
Перечисление типов JSON
-
null_
строка
целое число
беззнаковое целое число
число с плавающей точкой
массив
объект
true
false -
Указывает тип
JSONValue.
-
null_
- Структура JSONValue;
-
Узел значения JSON
- const pure nothrow @nogc @property @safe JSONType type();
-
Возвращает JSONType значения, хранящегося в этой структуре.
- Примеры:
-
string s = "{ \"language\": \"D\" }"; JSONValue j = parseJSON(s); writeln(j.type); // JSONType.object writeln(j["language"].type); // JSONType.string
- const pure @property @trusted string str();
pure nothrow @nogc @property @safe string str(string v); -
Получение/установка значения для
JSONType.string.- Исключения:
-
JSONExceptionдля чтения, еслиtypeне являетсяJSONType.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"
- const pure @property @safe long integer();
pure nothrow @nogc @property @safe long integer(long v); -
Получение/установка значения для
JSONType.integer.- Исключения:
-
JSONExceptionдля чтения, еслиtypeне являетсяJSONType.integer.
- const pure @property @safe ulong uinteger();
pure nothrow @nogc @property @safe ulong uinteger(ulong v); -
Получение/установка значения для
JSONType.uinteger.- Исключения:
-
JSONExceptionдля чтения, еслиtypeне являетсяJSONType.uinteger.
- const pure @property @safe double floating();
pure nothrow @nogc @property @safe double floating(double v); -
Получение/установка значения для
JSONType.float_. Обратите внимание, что, несмотря на название, это 64-битноеdouble, а не 32-битноеfloat.- Исключения:
-
JSONExceptionдля чтения, еслиtypeне являетсяJSONType.float_.
- const pure @property @safe bool boolean();
pure nothrow @nogc @property @safe bool boolean(bool v); -
Получение/установка значения булевого типа, хранящегося в JSON.
- Исключения:
-
JSONExceptionдля чтения, еслиthis.typeне являетсяJSONType.true_илиJSONType.false_.
- Примеры:
-
JSONValue j = true; writeln(j.boolean); // true j.boolean = false; writeln(j.boolean); // false j.integer = 12; import std.exception : assertThrown; assertThrown!JSONException(j.boolean);
- inout pure @property ref @system inout(JSONValue[string]) object();
pure nothrow @nogc @property @safe JSONValue[string] object(JSONValue[string] v); -
Получение/установка значения для
JSONType.object.- Исключения:
-
JSONExceptionдля чтения, еслиtypeне являетсяJSONType.object.
- Примечание
- это @system из-за следующего паттерна:
auto a = &(json.object()); json.uinteger = 0; // overwrite AA pointer (*a)["hello"] = "world"; // segmentation fault
- inout pure @property @trusted inout(JSONValue[string]) objectNoRef();
-
Получение значения для
JSONType.object. В отличие отobject, это возвращает объект по значению и может использоваться в коде @safe.Особенность заключается в том, что если возвращаемое значение равно null, то изменения не будут видны:
JSONValue json; json.object = null; json.objectNoRef["hello"] = JSONValue("world"); assert("hello" !in json.object);- Исключения:
-
JSONExceptionдля чтения, еслиtypeне являетсяJSONType.object.
- inout pure @property ref @system inout(JSONValue[]) array();
pure nothrow @nogc @property @safe JSONValue[] array(JSONValue[] v); -
Получение/установка значения для
JSONType.array.- Исключения:
-
JSONExceptionдля чтения, еслиtypeне являетсяJSONType.array.
- Примечание
- это @system из-за следующего паттерна:
auto a = &(json.array()); json.uinteger = 0; // overwrite array pointer (*a)[0] = "world"; // segmentation fault
- inout pure @property @trusted inout(JSONValue[]) arrayNoRef();
-
Получение значения для
JSONType.array. В отличие отarray, это возвращает массив по значению и может использоваться в коде @safe.Особенность: если вы добавляете элементы в возвращаемый массив, новые значения не видны в
- JSONValue
JSONValue json; json.array = [JSONValue("hello")]; json.arrayNoRef ~= JSONValue("world"); assert(json.array.length == 1);- Исключения:
-
JSONExceptionдля чтения, еслиtypeне являетсяJSONType.array.
- const pure nothrow @nogc @property @safe bool isNull();
-
Проверяет, является ли тип
JSONType.null_ - inout const pure @property @safe inout(T) get(T)();
inout pure @property @trusted inout(T) get(T : JSONValue[string])(); -
Получение значения универсального типа. Удобный метод, возвращающий это
JSONValueв качестве указанного типа D.- Примечание
- принимаются только числовые,
bool,string,JSONValue[string]иJSONValue[]типы
- Исключения:
-
JSONExceptionеслиTне может содержать содержимое этогоJSONValueConvExceptionв случае переполнения при преобразовании вT
- Примеры:
-
import std.exception; import std.conv; string s = `{ "a": 123, "b": 3.1415, "c": "text", "d": true, "e": [1, 2, 3], "f": { "a": 1 }, "g": -45, "h": ` ~ ulong.max.to!string ~ `, }`; struct a { } immutable json = parseJSON(s); writeln(json["a"].get!double); // 123.0 writeln(json["a"].get!int); // 123 writeln(json["a"].get!uint); // 123 writeln(json["b"].get!double); // 3.1415 assertThrown!JSONException(json["b"].get!int); writeln(json["c"].get!string); // "text" writeln(json["d"].get!bool); // true assertNotThrown(json["e"].get!(JSONValue[])); assertNotThrown(json["f"].get!(JSONValue[string])); static assert(!__traits(compiles, json["a"].get!a)); assertThrown!JSONException(json["e"].get!float); assertThrown!JSONException(json["d"].get!(JSONValue[string])); assertThrown!JSONException(json["f"].get!(JSONValue[])); writeln(json["g"].get!int); // -45 assertThrown!ConvException(json["g"].get!uint); writeln(json["h"].get!ulong); // ulong.max assertThrown!ConvException(json["h"].get!uint); assertNotThrown(json["h"].get!float);
- this(T)(T arg)
Ограничения: если (!isStaticArray!T);
this(T)(ref T arg)
Ограничения: если (isStaticArray!T);
inout this(T : JSONValue)(inout T arg); -
Конструктор для
JSONValue. ЕслиargявляетсяJSONValue, его значение и тип будут скопированы в новыйJSONValue. Обратите внимание, что это поверхностная копия: если типJSONType.objectилиJSONType.array, то будет скопирована только ссылка на данные. В противном случае,argдолжен быть неявно преобразуем в один из следующих типов:typeof(null),string,ulong,long,double, ассоциативный массивV[K]для любогоVиKт.е. объект JSON, любой массив илиbool. Тип будет установлен соответствующим образом.- Примеры:
-
JSONValue j = JSONValue( "a string" ); j = JSONValue(42); j = JSONValue( [1, 2, 3] ); writeln(j.type); // JSONType.array j = JSONValue( ["language": "D"] ); writeln(j.type); // JSONType.object
- inout pure ref @safe inout(JSONValue) opIndex(size_t i);
-
Синтаксис массива для json массивов.
- Исключения:
-
JSONExceptionеслиtypeне являетсяJSONType.array.
- Примеры:
-
JSONValue j = JSONValue( [42, 43, 44] ); writeln(j[0].integer); // 42 writeln(j[1].integer); // 43
- inout pure ref @safe inout(JSONValue) opIndex(string k);
-
Синтаксис словаря для json объектов.
- Исключения:
-
JSONExceptionеслиtypeне являетсяJSONType.object.
- Примеры:
-
JSONValue j = JSONValue( ["language": "D"] ); writeln(j["language"].str); // "D"
- void opIndexAssign(T)(auto ref T value, string key);
-
Оператор устанавливает
valueдля элемента JSON объекта поkey.Если значение JSON равно null, то оператор инициализирует его объектом, а затем устанавливает
valueдля него.- Исключения:
-
JSONExceptionеслиtypeне являетсяJSONType.objectилиJSONType.null_.
- Примеры:
-
JSONValue j = JSONValue( ["language": "D"] ); j["language"].str = "Perl"; writeln(j["language"].str); // "Perl"
- const @safe auto opBinaryRight(string op : "in")(string k);
-
Поддержка оператора
in.Проверяет, существует ли ключ в объекте.
- Возвращает:
- если найден, то
const(JSONValue)*, соответствующее ключу, в противном случаеnull.
- Исключения:
-
JSONExceptionесли правое операндJSONTypeне являетсяobject.
- Примеры:
-
JSONValue j = [ "language": "D", "author": "walter" ]; string a = ("author" in j).str;
- @system int opApply(scope int delegate(size_t index, ref JSONValue) dg);
-
Реализует интерфейс foreach
opApplyдля json массивов. - @system int opApply(scope int delegate(string key, ref JSONValue) dg);
-
Реализует интерфейс foreach
opApplyдля json объектов. - const @safe string toString(in JSONOptions options = JSONOptions.none);
-
Неявный вызов
toJSONдля этого JSONValue.options может быть использован для настройки поведения преобразования.
- const void toString(Out)(Out sink, in JSONOptions options = JSONOptions.none);
- const @safe string toPrettyString(in JSONOptions options = JSONOptions.none);
-
Неявный вызов
toJSONдля этого JSONValue, какtoString, но также передаёт true как аргумент pretty.options может быть использован для настройки поведения преобразования
- const void toPrettyString(Out)(Out sink, in JSONOptions options = JSONOptions.none);
- JSONValue parseJSON(T)(T json, int maxDepth = -1, JSONOptions options = JSONOptions.none)
Ограничения: если (isInputRange!T && !isInfinite!T && isSomeChar!(ElementEncodingType!T)); -
Парсит сериализованную строку и возвращает дерево JSON значений.
- Исключения:
-
JSONExceptionесли строка не соответствует грамматике JSON или глубина превышает максимальную глубину,ConvExceptionесли число в вводе не может быть представлено родным типом D.
- Параметры:
T jsonстрока в формате JSON для парсинга int maxDepthмаксимальная глубина вложенности, -1 отключает проверку глубины JSONOptions optionsразрешить декодирование строковых представлений NaN/Inf как значений с плавающей точкой
- JSONValue parseJSON(T)(T json, JSONOptions options)
Ограничения: если (isInputRange!T && !isInfinite!T && isSomeChar!(ElementEncodingType!T)); -
Парсит сериализованную строку и возвращает дерево JSON значений.
- Исключения:
-
JSONExceptionесли глубина превышает максимальную глубину.
- Параметры:
T jsonстрока в формате JSON для парсинга JSONOptions optionsразрешить декодирование строковых представлений NaN/Inf как значений с плавающей точкой
- @safe string toJSON(ref const JSONValue root, in bool pretty = false, in JSONOptions options = JSONOptions.none);
-
Принимает дерево значений JSON и возвращает сериализованную строку.
Любые типы Object будут сериализованы в отсортированном по ключам порядке.
Еслиprettyравно false, пробелы не генерируются. Еслиprettyравно true, сериализованная строка форматируется для удобного чтения. Установите флагJSONOptions.specialFloatLiteralsвoptions, чтобы закодировать NaN/Infinity как строки. - void toJSON(Out)(auto ref Out json, ref const JSONValue root, in bool pretty = false, in JSONOptions options = JSONOptions.none)
Constraints: if (isOutputRange!(Out, char)); - class JSONException: object.Exception;
-
Исключение, выбрасываемое при ошибках JSON
© 1999–2021 The D Language Foundation
Licensed under the Boost License 1.0.
https://dlang.org/phobos/std_json.html