Переместиться к: JSON_TYPE · JSONException · JSONFloatLiteral · JSONOptions · JSONValue · parseJSON · toJSON
Ссылки http://json.org/
Исходный код std/json.d
import std.conv : to; // проанализировать json-файл или json-строку в удобную структуру string s = `{ "language": "D", "rating": 3.5, "code": "42" }`; JSONValue j = parseJSON(s); // j и j["language"] возвращает JSONValue, // j["language"].str возвращает строку writeln(j["language"].str); // "D" writeln(j["rating"].floating); // 3.5 // проверка типа long x; if (const(JSONValue)* code = "code" in j) { if (code.type() == JSON_TYPE.INTEGER) x = code.integer; else x = to!int(code.str); } // создание json-структуры JSONValue jj = [ "language": "D" ]; // rating пока ещё не существует, поэтому для присвоения используется .object jj.object["rating"] = JSONValue(3.5); // создание массива для присвоения списку list jj.object["list"] = JSONValue( ["a", "b", "c"] ); // list уже существует, поэтому .object необязателен jj["list"].array ~= JSONValue("D"); string jjStr = `{"language":"D","list":["a","b","c","D"],"rating":3.5}`; writeln(jj.toString); // jjStr
Running...
nan
inf
negativeInf
Переместиться к: doNotEscapeSlashes · escapeNonAsciiChars · none · specialFloatLiterals
JSONOptions
: int;
none
specialFloatLiterals
escapeNonAsciiChars
doNotEscapeSlashes
NULL
STRING
INTEGER
UINTEGER
FLOAT
OBJECT
ARRAY
TRUE
FALSE
Переместиться к: array · arrayNoRef · floating · integer · isNull · object · objectNoRef · opApply · opBinaryRight · opIndex · opIndexAssign · str · this · toPrettyString · toString · type · uinteger
JSONValue
;
type
();
string s = "{ \"language\": \"D\" }"; JSONValue j = parseJSON(s); writeln(j.type); // JSON_TYPE.OBJECT writeln(j["language"].type); // JSON_TYPE.STRING
Running...
str
();
str
(string v
);
JSONValue j = [ "language": "D" ]; // получить значение writeln(j["language"].str); // "D" // изменить существующий ключ на новую строку j["language"].str = "Perl"; writeln(j["language"].str); // "Perl"
Running...
integer
();
integer
(long v
);
uinteger
();
uinteger
(ulong v
);
floating
();
floating
(double v
);
object
();
object
(JSONValue[string] v
);
Замечание: присутствует квалификатор @system из-за следующего шаблона:
auto a = &(json.object()); json.uinteger = 0; // перезапись указателя (*a)["hello"] = "world"; // segmentation fault
objectNoRef
();
null
, изменения не будут видны:
JSONValue json; json.object = null; json.objectNoRef["hello"] = JSONValue("world"); assert("hello" !in json.object);
array
();
array
(JSONValue[] v
);
Замечание: присутствует квалификатор @system из-за следующего шаблона:
auto a = &(json.array()); json.uinteger = 0; // перезапись указателя на массив (*a)[0] = "world"; // segmentation fault
arrayNoRef
();
JSONValue json; json.array = [JSONValue("hello")]; json.arrayNoRef ~= JSONValue("world"); assert(json.array.length == 1);
isNull
();
arg
)arg
)arg
);
arg
сам является JSONValue, его значение и тип будут скопированы в новый JSONValue. Обратите внимание, что это поверхностная копия: если типом является JSON_TYPE.OBJECT или JSON_TYPE.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); // JSON_TYPE.ARRAY j = JSONValue( ["language": "D"] ); writeln(j.type); // JSON_TYPE.OBJECT
Running...
JSONValue j = JSONValue( [42, 43, 44] ); writeln(j[0].integer); // 42 writeln(j[1].integer); // 43
Running...
opIndex
(string k
);
JSONValue j = JSONValue( ["language": "D"] ); writeln(j["language"].str); // "D"
Running...
opIndexAssign
(T)(auto ref T value
, string key
);
value
для элемента JSON-объекта по ключу key
.
null
, тогда оператор инициализирует его объектом и затем устанавливает значение
value
для него.
JSONValue j = JSONValue( ["language": "D"] ); j["language"].str = "Perl"; writeln(j["language"].str); // "Perl"
Running...
opBinaryRight
(string op : "in")(string k
);
null
.
JSONValue j = [ "language": "D", "author": "walter" ]; string a = ("author" in j).str;
Running...
opApply
(scope int delegate(string key, ref JSONValue) dg
);
toString
(in JSONOptions options
= JSONOptions.none);
options
может использоваться для настройки поведения преобразования.
toPrettyString
(in JSONOptions options
= JSONOptions.none);
true
.
options
может использоваться для настройки поведения преобразования.Переместиться к: 2
parseJSON
(T)(T json
, int maxDepth
= -1, JSONOptions options
= JSONOptions.none)maxDepth
.
T json |
строка в формате json для декодирования |
int maxDepth |
максимально допустимая глубина вложенности, -1 отключает проверку глубины |
JSONOptions options |
включение декодирования строковых представлений NaN/Inf как float-значений |
parseJSON
(T)(T json
, JSONOptions options
)T json |
строка в формате json для декодирования |
JSONOptions options |
включение декодирования строковых представлений NaN/Inf как float-значений |
toJSON
(ref const JSONValue root
, in bool pretty
= false, in JSONOptions options
= JSONOptions.none);
pretty
установлено в false
, не генерируются пробельные сиволы. Если pretty
установлено в true
, сериализованная строка форматируется, чтобы быть более удобочитаемой для человека. Установка флага JSONOptions.specialFloatLiterals задаёт параметры для кодирования NaN/Infinity в виде строк.
JSONException
: object.Exception;