Как получить доступ к списку в поле, используя Aeson? - PullRequest
0 голосов
/ 17 декабря 2018

Я следовал wreq tutorial , а также читал в блоге 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]

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

...