json Alt ←

Статический метод :string

Преобразование объекта Parser в JSON-строку.

^json:string[объект;опции_преобразования]

Метод преобразует системный или пользовательский объект в JSON-строку. По умолчанию объект пользовательского класса преобразуеытся в хеш. Результат — «чистая» строка, при необходимости сохранения в базу данных обработайте оператором taint.

Опции преобразования — хеш, в котором можно указать опции, рассмотренные ниже.

Опция По умолчанию Описание
$.skip-unknown(true|false) false При указании значения true вместо exception в результирующую JSON-строку будут выдаваться значения null при сериализации объектов с типами, отличными от void, bool, string, int, double, date, table, hash и file
$.indent(true|false) false При указании значения true будет включено форматирование результирующей JSON-строки символами табуляции по глубине вложенности
$.indent[строка] Можно указать строковое значение, которое будет использоваться как префикс при формировании строки с отступами. [3.4.3]
$.date[sql-string|gmt-string|iso-string|unix-timestamp] sql-string Опция определяет вид, в котором значения объектов класса date будут попадать в результирующую JSON-строку (см. одноименные методы объекта класса date).
$.void[null|string] null Опция определяет вид, в котором значения объектов класса void будут попадать в результирующую JSON-строку. По умолчанию выводится null, но возможна выдача в виде пустой строки. [3.4.4]
$.table[object|array|compact] object Опция определяет вид, в котором значения объектов класса table будут попадать в результирующую JSON-строку
object: [{"col1":"val11","col2":"val12",…}, {"col1":"val21","col2":"val22",…},…];
array: [["col1","col2",…] || null (для nameless-таблиц),["val11","val12",…],…];
compact: ["value11" || ["val11", "val12",…],…].
$.array[compact|array|object] compact Опция определяет вид, в котором значения объектов класса array будут попадать в результирующую JSON-строку [3.5.0]
compact: ["v0","v2",…]
array: ["v0",null,"v2",…]
object: {"0":"v0","2":"v2",…}
$.file[text|base64|stat] не определена Опция определяет вид, в котором значения объектов типа file будут попадать в результирующую JSON-строку.
Если опция не определена или ее значение равно stat, в результирующую JSON-строку попадает информация об объектах класса file (имя файла, размер, content-type, mode), но их содержимое не попадает.
$.xdoc[параметры преобразования в текст] не определена Опция преобразования объекта класса xdoc в строку [3.4.2]
$.класс[ссылка на метод] не определена Любой класс (включая вышеупомянутые date, table и file) можно вывести, применяя пользовательский метод, который должен принимать три параметра: ключ, объект и опции вызова ^json:string[] (последнее нужно для рекурсивного вывода пользовательских объектов).
Поиск методов происходит во всех родительских классах. [3.4.2]
$._default[ссылка на метод] не определена Если опция определена, то метод будет вызываться для вывода всех объектов пользовательских классов (кроме тех, вывод которых явно задан с помощью опции $.класс[ссылка на метод]). Метод должен принимать три параметра: ключ, объект и опции вызова. [3.4.2]
$._default[название метода] не определена Если опция определена и метод с указанным именем есть у объекта пользовательского класса, метод будет вызван для вывода объекта (кроме объектов тех классов, вывод которых явно задан с помощью опции $.класс[ссылка на метод]). Метод должен принимать два параметра: ключ и опции вызова. [3.4.4]
$.one-line(true|false) false При указании значения true результат будет возвращен в виде одной строки. [3.4.5]

Пример

@main[]
$h[
	$.void[]
	$.bool(true)
	$.double(1/2)
	$.string[русские буквы]
	$.hash[
		$.e[ee]
	]
	$.date[^date::create(2006;08;18;06;09;00)]
	$.table[^table::create{c1	c2	c3^#0Av1	v2	v3^#0Av4	v5	v6}]
	$.file[^file::create[text;zigi.txt;file-content]]
	$.img[^image::create(100;100;0)]
]

^json:string[$h;
	$.indent(true)
	$.table[array]
	$.file[base64]
	$.image[$image_handler]
]

@image_handler[key;value;params]
"custom value of image $key"

В результате выполнения будет выведено:

{
	"void":"",
	"bool":true,
	"double":0.5,
	"string":"русские буквы",
	"hash":{
		"e":"ee"
	},
	"date":"2006-08-18 06:09:00",
	"table":[
		["c1","c2","c3"],
		["v1","v2","v3"],
		["v4","v5","v6"]
	],
	"file":{
		"class":"file",
		"name":"zigi.txt",
		"size":12,
		"content-type":"text\/plain",
		"mode":"text",
		"base64":"ZmlsZS1jb250ZW50"
	},
	"img":"custom value of image img"
}