Я пытался вернуть true или false в зависимости от значения, присутствующего в данной хэш-карте. Я пытался использовать уменьшенный kv, но это действительно не работает.
например: {:address {:zip 411045, :city "pune"}, :coupans ["abc" "def"], :cost 200, :items [{:category "partywear", :name "shirt", :price 50.26} {:category "partywear", :name "trouser", :price 10.26}]}
Я хочу написать функцию, которая, если "items.price" = 50.26
and "items.name" = "shirt"
, должна возвращать true, а "items.price = 10.26 and "items.name" = "shirt"
должна возвращать false.
Сначала я выравниваю массив, а затем меняю ключ на ключ регулярного выражения (def compare_str_regex (clojure.string/replace compare_str #"\[\]" "\\\\[\\[0-9\\]+\\\\]"))
, например: items[].price -- > items[[0-9]+].price Затем я использую reduce-kv для итерации, но проблема в том, он проверит весь документ, который должен использовать условие и между двумя отправленными ключами
(reduce-kv (fn [m k v]
(if (and (re-find (re-pattern compare_str_regex ) k)
(op value v))
(reduced true)
false)) {} flat_pl_map)
get-in
, которая даст вам хотя бы часть пути к тому, что вы хотите. Например, если ваша структура JSON выше определена какjson-data
, вы можете найти цену первого товара, используя(get-in json-data [:items 0 :price])
. Вам нужно будет улучшить его, чтобы пройти через любые встроенные коллекции, такие как:items
, а затем придумать способ обработки результатов и обработки условияand
. - person Bob Jarvis - Reinstate Monica   schedule 24.10.2018