parse. Преобразование JSON-строки в хеш

^json:parse[JSON-строка;опции преобразования]

Метод преобразует JSON-строку в хеш.

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

По-умолчанию
Описание
$.depth(число)
19
Максимальная глубина вложенности.
$.double(true|false)
true
Преобразовывать вещественные числа в объекты класса double. Если указано значение false, то числовые значения будут оставаться в виде строк.
$.int(true|false)
true
Преобразовывать целые числа в объекты класса int. Если указано значение false, то числовые значения будут оставаться в виде строк.   [3.4.4]
$.distinct[first|last|all]
не определён
Способ обработки дублирующих ключей:
first   - будет оставлен первый встретившийся элемент;
last   - будет оставлен последний встретившийся элемент;
all   - в результат попадут все элементы, при этом элементы, начиная со второго, получат суффиксы _2, _3 и т.д.
по умолчанию - в случае обнаружения дублирующихся ключей будет выдано исключение (exception)
$.object[ссылка на метод]
не определён
Опция позволяет указать пользовательский метод с двумя параметрами, который будет вызываться для всех объектов. Возвращаемый методом объект (в том числе пользовательского типа) и будет помещаться в в результирующую структуру.
$.array[ссылка на метод]
не определён
Опция позволяет указать пользовательский метод с двумя параметрами, который будет вызываться для всех массивов. Возвращаемый методом объект (в том числе пользовательского типа) и будет помещаться в в результирующую структуру.   [3.4.2]
$.taint[язык преобразования]
не определён
Задаёт язык преобразования для всех строк в результирующем хеше.   [3.4.2]


Если json пришел из внешнего источника, то при его разборе необходимо обозначить доверие данным,
например через
^taint[clean;$form:json].

Пример
@main[]
$json_string[
{
   "a1":{"b": 1, "c": "
abc", "d": "xyz"},
   "a2":{
"b": 1.1, "b": 2.2, "b": 3.3, "d": {"da": 11, "db": 22}}
}
]

$h[^json:parse[$json_string;
   $.double(false)

   $.distinct[all]
   $.object[$
object_handler]
]]

@
object_handler[key;value]
$result[^if($key eq "d"){object with key='$key' and ^eval($value) fields}{$value}]

В результате разбора указанной JSON-строки хеш будет содержать:

$h[
   $.a1[
      $.b
(1)
      $.c[
abc]
      $.d[xyz]
   ]
   $.a2[
      $.b
[1.1]
      $.b_2
[2.2]
      $.b_3
[3.3]
      $.d[object with key='d' and 2 fields]

   ]
]




In order to add comments you must register.
Copyright © 1997–2021 Art. Lebedev Studio | http://www.artlebedev.ru Дата обновления: 12.04.2017