【发布时间】:2019-05-16 03:45:07
【问题描述】:
我正在尝试创建一个简单的 Haskell 应用程序,该应用程序从 API 获取数据,然后将它们插入数据库 (sqlite3)。我已经成功地从我的 API 中获取数据并创建了数据库。但是,我目前面临的问题是如何从 JSON 中提取这些数据并将其插入到数据库中。我无法分享所有细节,这就是我修改类型(数据)结构的原因。示例 API 响应:
[{"name":"John","surname":"Terry","workPlace":"Bank","accountBalance":124344.08,"age":44}]
Person 数据类型及其实例(用于提取):
data Person = Person
{
name :: Text,
surname :: Text,
workPlace :: Text,
accountBalance :: Rational,
age :: Integer
}
deriving (Eq, Show, Read, Generic, ToJSON )
instance FromJSON Person where
parseJSON (Object v) = p <$> n <*> s <*> w <*> acc <*> a
where p = Person
n = v .: "name"
s = v .: "surname"
w = v .: "workPlace"
acc = v .: "accountBalance"
a = v .: "age"
-- A non-Object value is of the wrong type, so fail.
parseJSON _ = mzero
提前致谢。
【问题讨论】:
-
您可以像将任何内容插入数据库一样进行操作。一旦你有了你需要的值,来源就无关紧要了。
-
你能把你的问题范围缩小一点,并提供更完整的细节吗?根据我的阅读,您已经拥有
Person类型的值,并希望在某个未指定的数据库库中创建一个数据库条目,可能是sqlite-simple,可能是sqlite,或sqlite-direct,或者可能是其他东西。似乎关于 JSON 的讨论都是多余的。 -
非常感谢您的回复。问题是,我需要将 json 中的值分配给变量,以便我可以将存储在这些变量中的值插入到数据库中,对吗?我的问题是,每当我尝试将 json 转换为对象时,我都会以 IO() 格式结束,而且我不知道接下来我应该按顺序做什么(并且它会使其可访问。)以提供我的数据库与数据。我是 Haskell 的初学者,所以我可能会遗漏一些东西。
-
如果您的问题与 IO 有关,请编辑问题并包含您正在执行 IO 的代码。如果您有可以将 Person 写入数据库的代码,请将其也包含在内。
-
这不是 IO 问题。 IO 是我要做的最后一件事,但它仍然没有改变这样一个事实,即我想了解的是如何从 JSON 中提取数据,以便将其分配给变量,然后插入到数据库中。谢谢。