Как получить доступ к списку в поле, используя Aeson?

Я следовал учебному пособию по Wreq, а также переназначил сообщение в блоге Snoyman, чтобы понять, как Data.Aeson.Lens работает, но у меня возникают проблемы с пониманием, как сделать очень простые вещи.

Так, например, почему эти два доступа дают разные результаты в зависимости от того, является ли массив верхним уровнем или зависает от поля Json?

#!/usr/bin/env stack
-- stack --resolver lts-12.22 script
{-# LANGUAGE OverloadedStrings #-}

import Control.Lens
import Data.Aeson.Lens
import qualified Data.ByteString as B

main :: IO ()
main = do
  let bs = "{\"dummy\": [1,2,3]}" :: B.ByteString
  print $ bs ^?! key "dummy" . values . _Number
  let b2 = "[1,2,3]" :: B.ByteString
  print $ b2 ^.. values . _Number

возвращается

1.0
[1.0,2.0,3.0]

Каков будет правильный способ получить одинаковые результаты в обоих случаях?

0 ответов

Другие вопросы по тегам