我一直在阅读Play的文档here关于json解析,但这一切看起来都适合解析Json你提前知道结构(例如它很好地映射到现有模型) )。对我来说,这进一步反映在这样一个事实上:json
模块的api或多或少是/
和//
,它们按名称查找结构。
虽然最终我我尝试转换为模型,但这是一个公共API点,所以我希望在此过程中保持友好并收集任何错误。即,字段不正确。
在伪代码中,id喜欢能够执行以下操作:
allowed_values = ['name', 'age', 'job']
field_errors = []
for key, value in json:
if key not in allowed_values:
field_erros.append(key)
我允许我返回unrecognized field "naem"
之类的内容,我觉得我很方便。
这可以(很容易)在scala中完成
答案 0 :(得分:1)
是的,这是可能的,虽然你必须写一些自定义代码,所以我不会真正考虑它"简单"。
Play将JSON解析为JsValue
特征。您可以对该特征进行模式匹配,它有两个您感兴趣的子类型:JsObject
和JsArray
(还有更多子类型,check the docs for the rest)
您的问题似乎是面向JSON对象而JsObject
的{{1}}是underlying: Map[String, JsValue]
,您应该可以轻松地遍历密钥/条目。
一些伪Scala代码(未编译):
Map