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[array|hash|ссылка на метод]
$json:array, значение которого по умолчанию array, можно поменять на hash [3.5.0]

Опция позволяет указать пользовательский метод с двумя параметрами, который будет вызываться для всех массивов. Возвращаемый методом объект (в том числе пользовательского типа) и будет помещаться в результирующую структуру.
При задании значения array создается массив, при задании значения hash создается хеш с цифровыми ключами, начинающимися с 0.   [3.5.0]
$.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]
   ]
]




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