Это связано со структурой Эзона. Я отправлю код без особых объяснений, кроме «sortBy
и comparing
ваши друзья»:
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
.
Тем не менее, вам намного лучше разобрать Асонский АСТ для значимого типа данных (который вам нужно будет определить самостоятельно, потому что вы знаете приложение) и реализуете сортировку для него. Эсон действительно выполнен как АСТ для синтаксического анализа и рендеринга JSON, а не для манипулирования JSON.
Вы используете эзон? Пожалуйста, обновите свой вопрос, чтобы отразить это; лучше всего добавить строку импорта. –
Да, используя Aeson. Я добавил тег к вопросу. – amitaibu