Это мой первый опыт использования аргонавтов и только небольшое знание линз (достаточно пройти). Я потратил некоторое время, пытаясь разобраться в проблеме, но ничего не получаю.Извлечение значений из массива JSON объектов JSON с использованием объективов Argonaut
Я пытаюсь создать объектив, чтобы получить JsonArray (из строк) от какого-то JSON. Я могу дойти до объекта, у которого есть массив, но не уверен, что делать дальше.
JSON выглядит следующим образом:
И мой объектив до сих пор это:
val hashtagsView = twitterEntitiesView >=> jsonObjectPL("hashtags") >=> jArrayPL
Я не уверен, что jArrayPL
правильно либо. Я хотел бы просто получить текст из массива.
Чтобы обернуть, может ли кто-нибудь помочь мне узнать, как построить объектив, который смотрит в хэштеги, а затем для каждого элемента массива заглянуть в текст, наконец получив значения как JsonArray
.
Update:
С некоторой помощью от Travis я следующий код составителя:
import argonaut._, Argonaut._
import monocle.std.list._, monocle.function.Each.each, monocle.function.Index.index
import scalaz._, Scalaz._
val \/-(json) = Parse.parse(rawJSON)
val lens = jObjectPrism
.composeOptional(index("hashtags"))
.composePrism(jArrayPrism)
.composeTraversal(each[List[Json], Json])
.composePrism(jObjectPrism)
.composeOptional(index("text"))
.composePrism(jStringPrism)
println(lens.getAll(json))
К сожалению, я получаю сообщение об ошибке выполнения: scalaz.Scalaz$.ToEitherOps(Ljava/lang/Object;)Lscalaz/syntax/EitherOps;
, начиная с линии val \/-(json) = Parse.parse(rawJSON)
Спасибо заранее!
Спасибо за ответ @Travis. Могу ли я уточнить, является ли это псевдокодом или он должен быть запущен? Причина, по которой я спрашиваю, заключается в том, что я не могу заставить ее работать сам. Ниже приведена ошибка, с которой я возвращаюсь: http://pastebin.com/UbdXjd3F Я использую версию Monocle 1.2.0, версию Scalaz 7.0.6 и версию Argonaut 6.0.4. Надеюсь, нет проблемы с зависимостью. – FintanH
@FintahH Это реальная сессия REPL, но с Argonaut 6.1, в которой используется другая версия Monocle со слегка отличающейся компоновкой пакетов. На данный момент я не на компьютере, но могу дать правильный импорт для версии 6.0.4 позже. –
@ FintanH О, извините, я ошибся - линзы Monocle вообще не были доступны в 6.0.4. –