— есть корневой объект с единственным полем trees, в нем массив объектов вида
{
tree,
path,
language
}
Так вот в path всегда строка, и это спарсить легко. language я пока игнорирую.
А как спарсить содержимое tree? В зависимости от содержимого одного поля, там может быть или не быть другого поля. И в этом другом поле есть разные штуки, вхождения которых меня интересуют.
Я думал просто сделать что-то типа Object -> String, но не выходит.
type AST = String
data ParsedTree = ParsedTree { tree :: AST, path :: FilePath } deriving (Generic, Show)
instance FromJSON ParsedTree where
parseJSON = withObject "ParsedTree"
$ \v -> ParsedTree <$> v .: "tree" <*> v .: "path"
Вот тут вот v это объект, а из типа ясно, что там ожидается строка, и почему-то никакие fromJSON и pack . show не получается тут использовать.
(Что такое <$>, .:, <*> я, само собой, еще не смотрел).
Так вот, возможно ли вложенный кусок json просто записать как строку?
Наверное, правильным решением было бы описать ParsedTree так, чтобы там все возможные варианты учитывались. И затем написать парсер, который их все учитывает. И затем какими-нибудь дженериками заглядывать внутрь каждого такого tree, подсчитывая вхождения конструкторов, как мы уже делали. Но описывать такой тип — это при worst case означает изучать исходники semantic, в которых вон около 20к loc обещают
А, или не fromJSON, а encode. Но все равно не зашло
как обьект tree выглядит? простой пример бы
Обсуждают сегодня