Estoy tratando de analizar JSON de la siguiente forma usando Aesoncómo analizar JSON anidada con Aeson
{"field":{"name":"..."}}
or
{"tag":{"name":"..."}}
or
{"line":{"number":"..."}}
para construir el siguiente tipo de datos
data Rule = Line Integer
| Field L.ByteString
| Tag L.ByteString
Por desgracia, se enfrentan a dos problemas que me no he encontrado soluciones, a saber:
¿Cómo analizo JSON? En cuanto a la implementación de (.:), utiliza la búsqueda para extraer el valor de una clave específica. Tengo dudas de hacer algo como esto ya que parece depender demasiado de los detalles de cómo Aeson implementa las cosas. ¿Me equivoco al pensar que esto es un problema?
¿Cómo uso el constructor de datos correcto en función de qué clave está presente en el JSON? Todos mis esfuerzos con < |> no me han llevado a ninguna parte.
Publicaba el código que he escrito hasta ahora, pero ni siquiera llegué al punto en el que tengo algo que valga la pena publicar.
¡Muchas gracias, esto es exactamente lo que estaba buscando! Hice un pequeño cambio en las dos primeras líneas para hacer que 'parseJSON (Object o) = case M.toList o of', así como agregar un' parseJSON _ = mzero' por separado. –
@luke_randall, por cierto, utilicé 'o <- parseJSON j' en lugar de' mzero' a propósito, ya que 'mzero' no proporciona ninguna información útil sobre lo que salió mal más allá de un simple' "mzero" ', mientras que 'parseJSON' le da mensajes de error como' "cuando espera que un texto de mapa sea una matriz encontrada en su lugar" ' – hvr
Muy bien, eso tiene sentido. Gracias por explicar tu razonamiento. Creo que lo revertiré. –