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

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

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

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


По умолчанию
Описание
$.skip-unknown(true|false)
false
При указании значения true вместо exception в результирующую JSON-строку будут выдаваться значения null при сериализации объектов с типами, отличными от void, bool, string, int, double, date, table, hash и file.
$.indent(true|false)
$.indent[строка]
false
При указании значения true будет включено форматирование результирующей JSON-строки символами табуляции по глубине вложенности.
Можно указать строковое значение, которое будет использоваться как префикс при формировании строки с отступами. [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]   [3.5.0]
compact
Опция определяет вид, в котором значения объектов класса array будут попадать в результирующую JSON-строку.
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"
}


Copyright © 1997–2024 Art. Lebedev Studio | http://www.artlebedev.ru Дата обновления: 28.12.2024