Tôi cố gắng để phân tích cú pháp JSON có dạng sau đây sử dụng aesonLàm thế nào để phân tích cú pháp JSON lồng nhau với aeson
{"field":{"name":"..."}}
or
{"tag":{"name":"..."}}
or
{"line":{"number":"..."}}
để xây dựng các kiểu dữ liệu sau
data Rule = Line Integer
| Field L.ByteString
| Tag L.ByteString
Thật không may, tôi phải đối mặt với hai vấn đề mà tôi đã không tìm thấy giải pháp cho, cụ thể là:
Làm cách nào để phân tích cú pháp JSON lồng nhau? Nhìn vào việc thực hiện (.:), nó sử dụng tra cứu để trích xuất giá trị của một khóa cụ thể. Tôi do dự để làm một cái gì đó như thế này vì nó có vẻ là dựa quá nhiều vào các chi tiết cụ thể về cách aeson thực hiện mọi thứ. Tôi có sai khi nghĩ đây là vấn đề không?
Làm cách nào để sử dụng đúng hàm tạo dữ liệu dựa trên khóa nào có trong JSON? Tất cả những nỗ lực của tôi với < |> đã dẫn tôi đến hư không.
Tôi sẽ đăng mã mà tôi đã viết từ trước tới nay, nhưng tôi thậm chí còn chưa đến mức tôi có bất kỳ thứ gì đáng để đăng.
Cảm ơn rất nhiều, đây chính xác là những gì tôi đang tìm kiếm! Tôi đã thực hiện một thay đổi nhỏ cho hai dòng đầu tiên để làm cho nó trở thành 'parseJSON (Object o) = trường hợp M.toList o của', cũng như thêm một 'parseJSON _ = mzero' riêng biệt. –
@ luke_randall, btw, tôi đã sử dụng 'o <- parseJSON j' thay vì' mzero' với mục đích, vì 'mzero' không cung cấp bất kỳ thông tin hữu ích nào về những gì đã xảy ra ngoài một' mzero '', trong khi 'parseJSON' cung cấp cho bạn các thông báo lỗi như' "khi mong đợi một Text Map a, gặp Array thay vì" ' – hvr
Alright, điều đó có ý nghĩa. Cảm ơn bạn đã giải thích lý do - tôi nghĩ tôi sẽ hoàn nguyên. –