| Новости | 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]чтобы сохранять тип значения, не приводя числа к строкам.