Разбор JSON с несколькими кортежами в List‹object› в scala

[
{"fname":"Foo","lname":"Pacman"},
{"fname":"Bar","lname":"Mario"},
{"fname":"Poo","lname":"Wario"}
]

Ну, у меня есть строка JSON в этом формате. Теперь мне нужно преобразовать каждый кортеж -> {"fname":"Foo","lname":"Pacman"}

К объекту Person, например. давайте предположим, что у меня есть класс case

case class Person(fname:String,lname:String)

Теперь, как мне добраться, List<person>

Если бы у меня был JSON, содержащий данные для одного кортежа, я мог бы

val o:Person = parse[Person](jsonString)// I am actually using Jerkson Lib

Но поскольку существует более одного кортежа, как мне анализировать их по отдельности, создавать объекты и создавать список.


person mane    schedule 10.06.2014    source источник
comment
Вы пробовали parse[List[Person]]? Разве это не работает?   -  person cmbaxter    schedule 10.06.2014
comment
Я попробовал это только сейчас, и это работает.... Забавно, был ответ в 1 строку val parsedList = parse[List[Person]](jsonString)   -  person mane    schedule 10.06.2014
comment
учитывая небольшую синтаксическую ошибку, рассмотрите возможность удаления вопроса.   -  person maasg    schedule 10.06.2014
comment
Хорошо, я буду, но вы не думаете, что кому-то это может пригодиться?? Например, сколько времени я искал в Интернете этот ответ.   -  person mane    schedule 10.06.2014
comment
Тогда у него должен быть правильный ответ. @cmbaxter, не могли бы вы указать свое решение в качестве ответа?   -  person maasg    schedule 10.06.2014


Ответы (2)


Jerkson поддерживает десериализацию списков объектов из коробки, поэтому все, что вам нужно сделать, это:

val people = parse[List[Person]](personJson)
person cmbaxter    schedule 10.06.2014

Вы можете использовать json4s (который является оболочкой для jackson или lift-json), где вы также получаете такой анализ возможности из коробки.

   import org.json4s._
   import org.json4s.jackson.JsonMethods._
   implicit val formats = DefaultFormats 

    val personJson = """
      [
      {"fname":"Foo","lname":"Pacman"},
      {"fname":"Bar","lname":"Mario"},
      {"fname":"Poo","lname":"Wario"}
      ]"""
    case class Person(fname:String,lname:String)
    val people = parse(personJson).extract[List[Person]]
person Ashalynd    schedule 10.06.2014
comment
ммм, я тоже попробую json4s для своих следующих проектов, так как Джерксон, похоже, не активно развивается, спасибо за ответ - person mane; 11.06.2014
comment
Сам сейчас пользуюсь, вроде нормально. успехов в ваших проектах :) - person Ashalynd; 11.06.2014