API がクライアントから JSON データを受信しています。
スキーマを使用して、受け取ったデータの検証と強制を実行したいと考えていますが、追加の要件が 1 つあります。スキーマに記述されていないマップ キーがある場合は、検証に失敗するのではなく、無視して削除します (これは、私のクライアントは、私が気にかけているものと一緒にいくつかの「ガベージ」プロパティを送ってくるかもしれません.私はそれに対して寛容になりたい.)
一言で言えば、select-keys
検証/強制の前に、スキーマを使用して入力データに対して「深い」を実行したいと思います。
必要なものの例:
(require '[schema.core :as sc])
(def MySchema {:a sc/Int
:b {:c sc/Str
(sc/optional-key :d) sc/Bool}
:e [{:f sc/Inst}]})
(sanitize-and-validate
MySchema
{:a 2
:b {:c "hello"
:$$garbage-key 32}
:e [{:f #inst "2015-07-23T12:29:51.822-00:00" :garbage-key 42}]
:_garbage-key1 "woot"})
=> {:a 2
:b {:c "hello"}
:e [{:f #inst "2015-07-23T12:29:51.822-00:00"}]}
これを行う信頼できる方法をまだ見つけていません。
- ウォーカーがキーにアクセスできないように見えるため、カスタム変換では実行できないようです。
- マップ スキーマとスカラー スキーマを一般的な方法で区別するのは難しいため、手動でスキーマを調べようとしてもうまくいきませんでした。また、スキーマが持つことができるすべての形状を説明することも困難です。
私が見ていない明らかな方法はありますか?
ありがとう!