【发布时间】:2018-11-14 14:56:43
【问题描述】:
为了验证一些 JSON 文档,我需要确保我的 JSON(表示有一个映射)具有一组特定的字段,不多也不少。
据我所知,与#{a := FieldA} = MyJSON 之类的模式匹配只能确保密钥a 存在于MyJSON 中。
不幸的是,maps:with/2 会忽略丢失的键,而大多数其他地图功能当时只能在单个键上工作。
在这种情况下,确保地图包含特定字段或字段列表而不包含任何其他字段的推荐方法是什么?
我目前的丑陋解决方案是对我需要的所有键进行模式匹配并重建一个新映射,如下所示:
validate(#{a := A, b := B, c := C}) ->
#{a => A, b => B, c => C}.
但它变得非常难以维护,而且很快。
【问题讨论】:
-
在这些情况下使用
record不是更好吗?或者至少一个记录/元组(或任何其他你事先知道它的结构)你可以检查它。 -
@ɐuıɥɔɐɯ 我可能会使用 proplist 或元组(这是 sile/jsone 的输出选项)。但是比较两个地图的完全相同的键是一个常见的用例,而且由于尚未实现所有地图功能,我认为它最终会在匹配语法或地图模块中得到支持。