Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
G_Z 28.11.2019 01:57
@main[] $hash[ $.a[ $.c(1) $.d(2) ] $.b[3] $.e[4] $.f[2] ] <pre> ^json:string[^select[$hash][;value]($value == 2)[ $.recursive(true) ]][ $.indent(true) ] </pre> @select[hash;key_name;value_name;condition;options][locals] $result[^hash::create[]] $recursive(^options.recursive.bool(false)) $index(0) ^hash.foreach[key;value]{ ^if($value is hash && $recursive){ ^result.add[^select[$value;$key_name;$value_name]{ $caller.$key_name[$$key_name] $caller.$value_name[$$value_name] $condition }[$options]] }{ $caller.$key_name[$key] $caller.$value_name[$value] ^if($condition){ ^result.add[^hash.at($index)[hash]] } } ^index.inc[] } # @select[hash;key_name;value_name;condition;options][locals] # $result[^hash::create[]] # $recursive(^options.recursive.bool(false)) # $index(0) # ^hash.foreach[key;value]{ # ^if($value is hash && $recursive){ # $selected[ # $.$key[^select[$value;$key_name;$value_name]{ # $caller.$key_name[$$key_name] # $caller.$value_name[$$value_name] # $condition # }[$options]] # ] # }{ # $caller.$key_name[$key] # $caller.$value_name[$value] # ^if($condition){ # $selected[^hash.at($index)[hash]] # } # } # ^result.add[$selected] # ^index.inc[] # }Если нужен плоский вид результата, то используем первый метод:
{ "d":2, "f":"2" }Если вложенный — второй:
{ "a":{ "d":2 }, "f":"2" }
^hash.at($index)[hash]вместо
$.$key[$value]чтобы сохранять тип значения, не приводя числа к строкам.