parse. Преобразование JSON-строки в хеш
|
^json:parse[JSON-строка;опции преобразования]
Метод преобразует JSON-строку в хеш.
Опции преобразования - хеш, в котором можно указать:
|
По-умолчанию
|
Описание
|
$.depth(число)
|
19
|
Максимальная глубина вложенности.
|
$.double(true|false)
|
true
|
Преобразовывать числа в объекты класса double. Если указано значение false, то числовые значения будут оставаться в виде строк.
|
$.distinct[first|last|all]
|
не определён
|
Способ обработки дублирующих ключей:
first - будет оставлен первый встретившийся элемент; last - будет оставлен последний встретившийся элемент; all - в результат попадут все элементы, при этом элементы, начиная со второго, получат суффиксы _2, _3 и т.д. по умолчанию - в случае обнаружения дублирующихся ключей будет выдано исключение (exception) |
$.object[ссылка на метод]
|
не определён
|
Опция позволяет указать пользовательский метод с двумя параметрами, который будет вызываться для всех объектов. Возвращаемый методом объект (в том числе пользовательского типа) и будет помещаться в в результирующую структуру.
|
$.array[ссылка на метод]
|
не определён
|
Опция позволяет указать пользовательский метод с двумя параметрами, который будет вызываться для всех массивов. Возвращаемый методом объект (в том числе пользовательского типа) и будет помещаться в в результирующую структуру.
|
$.taint[язык преобразования]
|
не определён
|
Задаёт язык преобразования для всех строк в результирующем хеше.
|
Пример
@main[]
$json_string[{
"a1":{"b": 1, "c": "xyz", "d": "zzz"},
"a2":{"b": 1, "b": 2, "b": 3}
}]
$h[^json:parse[$json_string;
$.double(false) $.distinct[all]
$.object[$handler]
]]
@handler[key;value]
$result[^if($keq eq "d"){=^value.length[]=}{$value}]
В результате разбора указанной JSON-строки хеш будет содержать:
$h[
$.a1[
$.b[1]
$.c[xyz]
$.d[=3=]
]
$.a2[
$.b[1]
$.b_2[2]
$.b_3[3]
]
]