我正在使用 Data.Aeson 将一些 JSON 解析为 Record 类型。不时将数据添加到 JSON 中,这会破坏我的代码,因为 Aeson 会抱怨以下内容:
预期对象有 21 个名称/值对,但得到 23 个名称/值
我真的更喜欢以容错的方式解析 JSON——我不在乎以后是否有更多的字段被添加到 JSON,只要解析任何你能做的!有没有办法实现这种容错?这是我的代码:
myRecordFromJSONString :: BS.ByteString -> Maybe MyRecord
myRecordFromJSONString s = case Data.Attoparsec.parse json s of
Done _rest res -> Data.Aeson.Types.parseMaybe parseJSON res
_ -> Nothing
我应该补充一点,我正在使用来自 Data.Aeson.TH 的 derivedJSON 来生成解析代码。如果我手动编写 FromJSON 代码,它是容错的,但我不想这样做......