我尝试从API解析JSON,数据结构如下
{
"en": {
"translation": {
"name": "Name",
"description": ["I am a", "en person"]
}
},
"jp": {
"translation": {
"name": "JP Name",
"description": ["I am a", "jp person"]
}
}
}
字符串
所以我只想把它们解析成像newtype Translations = Map String String
这样的东西。locale将是键值,值将是JSON翻译的字符串,比如{"name": "Name", "description": ["I am a", en person"]}
,因为值可以是任意复杂的,我不关心/需要把它转换成其他Haskell数据结构。
我尝试了很多方法来为Translation
写一个合适的parseJSON
,但仍然无法实现。
任何帮助将不胜感激!
2条答案
按热度按时间nhjlsmyf1#
我们可以通过以下方式解码
ByteString
:字符串
因此,我们只需要在
Object构造函数中 Package 的
HashMap Text Object`上执行Map:型
然后我们得到一个
Map String String
,它被一个Maybe
包裹(因为解码和处理都可能出错,所以最好使用一个Maybe
),它将String
sMap到String
s上:型
也就是说,我不确定JSON blob作为值是否是你想要的,因为现在你不能“查看”值并检查元素内部的内容。此外,如果你想做很多查找,当你想检查两个
Text
是否相同时,Text
通常要快一个数量级。lokaqttq2#
Map
和HashMap
都有FromJSON
的示例。所以不需要在Object
构造函数上匹配,你可以只指定所需的类型和Aeson.decode
:字符串