json Alt ←

Статический метод :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]
   ]
]