use aeson's value instead of inflexible structs
simplify parsing