2016-02-02 5 views
0

Я пытаюсь разобрать значения JSON с помощью Aeson, и у меня нет проблем (до сих пор) разбирать объекты или массивы, но я не могу заставить Aeson анализировать JSON-документы, которые являются только строками.Разбирать значение верхнего уровня с помощью Aeson

Как я понимаю, поскольку значения RFC 7159 являются законными документами JSON, и Aeson поддерживает это с 0.9.0.0 (я использую 0.9.0.1), поэтому он должен работать. Например, я обертывание API, который возвращает строки как JSON документы верхнего уровня для многих своих вызовов, и хотел бы NewType этих строк для некоторой статической безопасности типизации:

newtype Bar = Bar String deriving (Eq, Show) 
instance FromJSON Bar where 
    parseJSON (String v) = pure (Bar $ T.unpack v) 
    parseJSON _ = mzero 

Если я пытаюсь расшифровать что-то :

decode "JustSomeRandomString" :: Maybe Bar 

все, что я получаю, это Nothing в обмен.

Любые идеи, что я делаю неправильно? Конечно, я мог бы обрабатывать вызовы API, которые возвращают строки как документы JSON без Aeson, но хотели бы, чтобы все было равномерно!

ответ

2

Попробуйте decode "\"JustSomeRandomString\"" :: Maybe Bar

+0

Не могу поверить, что я пропустил, что я просто скопировал локон выход из консоли и работал с этим. API, который я использую, сломан, он не переносит строки в кавычки ... – kmelva