按键排序 [Value]

Sort [Value] by key

我有下面的 Value 列表,我想按 delta 键排序。

{-# LANGUAGE Haskell2010 #-}
{-# LANGUAGE OverloadedStrings #-}
import Data.Aeson

lists :: [Value]
lists =
    [ object ["label" .= String "foo", "delta" .= Number 2]
    , object ["label" .= String "bar", "delta" .= Number 3]
    , object ["label" .= String "baz", "delta" .= Number 1]
    ]

由于 Aeson 的结构,这涉及更多。除了“sortBycomparing 是你的朋友”之外,我 post 代码没有太多解释:

import Data.Aeson.Types (parseMaybe, Value, Parser)
import Data.Ord (comparing)
import Data.List (sortBy)
import Data.Scientific (Scientific)
import Data.Text (Text)

sortByKeyForNumberField :: Text -> [Value] -> [Value]
sortByKeyForNumberField key = sortBy (comparing $ parseMaybe parserFunction)
  where
    parserFunction :: Value -> Parser Scientific
    parserFunction = withObject "some object" (.: key)

然后您可以通过评估 sortByKeyForNumberField "delta" lists 来计算您想要的列表。

但是,您最好将 Aeson 的 AST 解析为有意义的数据类型(您必须自己定义,因为您了解应用程序)并为其实现排序。 Aeson 确实是作为用于解析和渲染 JSON 而不是用于操作 JSON.

的 AST