簡體   English   中英

使用Data.Aeson的其他字段的占位符

[英]Placeholder for additional fields with Data.Aeson

假設我得到了一個JSON,其中包含一些我知道的字段和一些我不知道的字段:

{
  "a": { ... },
  "b": { ... },
  "c": { ... },
  "something": "else",
  "more": {"of": ["the", "same"]},
  "and": ["even", "some", "more"]
}

由於JSON結構有點復雜,因此我非常想在Haskell中使用以下數據進行處理:

data A = ...
data B = ...
data C = ...
data MyObject = MyObject
  {
    a :: A
  , b :: B
  , c :: C
  , additionalFields :: Object
  }

是否可以將字段a,b和c轉換為Haskell對象,並將所有其他字段打包並作為Aeson.Object傳遞?

另外,我對JSON字段順序沒有任何保證。

當然-只需將對象存儲在AdditionalFields(第四個插槽)中:

instance FromJSON MyObject where
    parseJSON obj@(Object v) = MyObject  <$>
        v .: "a"                         <*>
        v .: "b"                         <*>
        v .: "c"                         <*>
        (pure obj)
    parseJSON _                      = mzero

如果要先刪除abc的鍵,請使用:

import Data.HashMap.Strict as HM

...

   pure ( HM.delete "a" $ HM.delete "b" $ HM.delete "c" obj )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM