Parsowanie JSON odporne na błędy
Używam Data.Aeson do analizy niektórych JSON w typ rekordu. Od czasu do czasu dane są dodawane do JSON i to łamie mój kod, ponieważ Aeson narzeka na coś w wyniku:
oczekiwany Obiekt z 21 parami nazwa / wartość, ale otrzymał 23 nazwę / wartość
Naprawdę wolałbym analizować JSON w sposób odporny na błędy - nie obchodzi mnie, czy więcej pól zostanie dodanych do JSON w późniejszym terminie, po prostu przeanalizuj wszystko, co możesz! Czy istnieje sposób na osiągnięcie tej odporności na błędy? Oto mój kod:
myRecordFromJSONString :: BS.ByteString -> Maybe MyRecord
myRecordFromJSONString s = case Data.Attoparsec.parse json s of
Done _rest res -> Data.Aeson.Types.parseMaybe parseJSON res
_ -> Nothing
Powinienem dodać, że używam deriveJSON z Data.Aeson.TH, aby wygenerować kod parsowania. Jeśli piszę kod FromJSON ręcznie, jest on odporny na błędy, ale nie chcę tego robić ...