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