私はJSONのデータタイプUser
のリストを符号化し、標準出力に出力し、次のHaskellコードを有する:、現時点でコードをハスケル/ Aseon:1つのオブジェクトとして出力JSON
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Data.Aeson
import Data.Text
import qualified Data.ByteString.Lazy.Char8 as B
data User = User
{ id :: String
, name :: String
, address :: String
} deriving (Show)
instance ToJSON User where
toJSON (User id name address) = object
[ pack id .= object
[ "name" .= name
, "address" .= address
]
]
users :: [User]
users = [ User "user 1" "name of user 1" "address of user 1"
, User "user 2" "name of user 2" "address of user 2"
]
main :: IO()
main = B.putStrLn $ encode users
を
[
{
"user 1": {
"address": "address of user 1",
"name": "name of user 1"
}
},
{
"user 2": {
"address": "address of user 2",
"name": "name of user 2"
}
}
]
しかし、私は出力以下JSON構造(内側の2つのオブジェクトを結合する)したい:
{
"user 1": {
"name": "name of user 1",
"address": "address of user 1"
},
"user 2": {
"name": "name of user 2",
"address": "address of user 2"
}
}
次の出力を生成します
希望するエンコード済みのJSONを印刷するには、どうすればtoJSON
を変更する必要がありますか?
haskellに流暢ではありませんが、内側のオブジェクトをラップする外側のオブジェクトを取り除くことはできますか? – MiltoxBeyond
実際には、外側のオブジェクトを取り除くことはできません。内側のオブジェクトは2つで、1つではないからです。内側のものを最初にマージする必要があります。 – watain
クエストオンにタイプミスはありますか?私は '' lastname ': "ユーザー2の名前"を希望の出力に見ますが、 '' lastname' 'は質問の他の場所には表示されません。 –