- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我有 JSON
我尝试推导出 FromJSON
实例自动使用 Generics
,我遇到了 id
的问题存在于 JSON
中的多个位置.
有没有办法让我只覆盖 id
部分还是我必须编写整个实例才能更改这些特定条目? JSON
实际上有更多的字段,但我在这个例子中省略了大部分。所以写出整个FromJSON
其实比较繁琐。实例。
JSON:
{
"response": [
{
"id": 1,
"brandId": 1,
"productTypeId": 1,
"identity": {
"sku": "x",
"barcode": "Ax"
},
"stock": {
"stockTracked": false,
"weight": {
"magnitude": 0
},
"dimensions": {
"length": 0,
"height": 0,
"width": 0,
"volume": 0
}
},
"financialDetails": {
"taxable": false,
"taxCode": {
"id": 1,
"code": "x"
}
},
... etc
]
}
data Response = Response
{ response :: [Body]
} deriving (Show,Generic)
data Body = Body
{ id :: Int
, brandId :: Int
, productTypeId :: Int
, identity :: Identity
, productGroupId :: Int
, stock :: Stock
, financialDetails :: FinancialDetails
} deriving (Show,Generic)
data Identity = Identity
{ sku :: String
, ean :: String
, barcode :: String
} deriving (Show,Generic)
data Stock = Stock
{ stockTracked :: Bool
, weight :: Weight
, dimensions :: Dimensions
} deriving (Show,Generic)
data Weight = Weight
{ magnitude :: Int
} deriving (Show,Generic)
data Dimensions = Dimensions
{ length :: Int
, height :: Int
, width :: Int
, volume :: Int
} deriving (Show,Generic)
data FinancialDetails = FinancialDetails
{ taxable :: Bool
, taxCode :: TaxCode
} deriving (Show,Generic)
data TaxCode = TaxCode
{ id :: Int
, code :: String
} deriving (Show,Generic)
instance FromJSON Response
instance FromJSON Body
instance FromJSON Identity
instance FromJSON Stock
instance FromJSON Weight
instance FromJSON Dimensions
instance FromJSON FinancialDetails
[1 of 1] Compiling Main ( reponse.hs, interpreted )
response.hs:73:8:
Multiple declarations of `id'
Declared at: response.hs:19:7
response.hs:73:8
Failed, modules loaded: none.
id
至
body_id
第二个到
taxCode_id
无需写出整个实例。
最佳答案
派生 FromJSON 实例时,您可以将选项传递给 genericParseJSON
功能。通常是
data Foo = {- ... -} deriving (Show, Generic)
instance FromJSON Foo where
parseJSON = genericParseJSON defaultOptions
-- defaultOptions :: Options
defaultOptions
与
Option
您手动构建。
Option
类型有一个字段
fieldLabelModifier
可以预处理您的数据类型的字段名称。您可以将数据类型定义为
data Body = Body
{ body_id :: Int
...
"body_id"
的辅助函数至
"id"
以及其他任何未更改的内容:
body_noprefix "body_id" = "id"
body_noprefix s = s
instance FromJSON Body where
parseJSON = genericParseJSON (defaultOptions { fieldLabelModifier = body_noprefix })
关于json - 使用 Aeson/JSON 处理派生的 Aeson FromJSON 实例中的 `id`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35702440/
如果我有 JSON我尝试推导出 FromJSON实例自动使用 Generics ,我遇到了 id 的问题存在于 JSON 中的多个位置. 有没有办法让我只覆盖 id部分还是我必须编写整个实例才能更改这
如何声明以下数据类型的 FromJSON 实例: data Privacy = Everyone | AllFriends | FriendsOfFrien
我有这样的数据类型: data A = A T.Text deriving (Generic, Show) instance A.ToJSON A 如果我对它使用A.encode: A.encode
如果不是Nothing,我试图返回一个JSON数据表示,如果Nothing则返回一个空的JSON对象; 我知道我可以做到: encode () -- "[]" 但现在我想要一个空对象( "{}" )。
我有一个(有效)json 编码数组,其中数据丢失或格式错误。我希望 Aeson 将其转换为 Maybe [Maybe Point] 并具有 Nothing,其中数组元素不是有效的 Point。 imp
我需要解析一个具有字符串元素的对象,其中字符串本身是一个字符串化对象: { "a" : "apples", "bar" : "{\"b\":\"bananas\"}" } 我想将其解析为
我正在尝试解析 JSON 以生成具有多个构造函数的类型。挑战在于该类型以包含所需数据的键的名称进行编码。理论上,我可以使用一堆 .:? 调用,然后检查给定的键是否返回 Just 但我认为必须有更好的方
我有一个格式为的 JSON 请求 {"command":"get","params":{"something":"something else"}} 以及来自 Yesod book 的代码片段 {-#
我需要解析没有严格结构的 json API 响应: { response: { /* any object here */ } } 如何编写 parseResponse 来保留解析(或为其选择解析器
假设有一个像这样的 JSON: { "bob_id" : { "name": "bob", "age" : 20 }, "jack_id" : { "name":
函数 decode 和 decode' 来自 aeson 包装几乎相同。但是它们在文档中描述了细微的差异(在此处仅发布文档的有趣部分): -- This function parses immedia
例如,我有多个构造函数的数据类型 data AB = A { ab :: Text , a :: Text } | B { ab :: Text , b ::
我正在尝试使用 aeson 来解析 api 返回的 json。使用 wreq 从 api 端点获取响应。在此字符串上运行 eitherDecode 时,我得到: Left "Failed readin
我所说的“历史数据”只是指日期作为键,当天的值作为值。 例如,政府机构或大学的研究部门经常以这种格式编制有关地震、降雨、市场变动等的日期 { "Meta Data": {
我有一个复杂的嵌套 json,我正在尝试使用 Aeson 和 Attoparsec 将其解析为我的自定义类型。基于问题的信息:Haskell, Aeson & JSON parsing into cu
我想解析一个 JSON 对象并使用给定的 name 创建一个 JSONEvent和 args 我正在使用 Aeson,现在我坚持转换 "args":[{"a": "b"}]到 [(String, St
我想使用酸商店存储 aeson Values。我采用了最小的酸实现,并试图天真地将类型切换到值。这些是我对 derivedSafeCopy 的调用: $(deriveSafeCopy 0 'base
aeson似乎在解析 JSON 时采取了一种有点简单的方法:它将顶级 JSON 值(对象或数组)解析为自己的固定表示,然后提供帮助用户将该表示转换为自己的表示的工具。当 JSON 对象和数组很小时,这
假设我要实现 FromJSON对于数据类型。以下是完整的源代码: {-# LANGUAGE NamedFieldPuns , OverloadedStrings , TupleSect
我有以下问题,我有一个带有可选键的 JSON 格式,我需要从我的 haskell 代码生成。 让我们举个例子 {-# LANGUAGE DeriveGeneric #-} import GHC.Gen
我是一名优秀的程序员,十分优秀!