2016-05-01 3 views
1

Рассмотрим следующий JSON:Play Framework JsReads для имен объектов и значений

{ 
    "1992": "this is dog", 
    "1883": "test string", 
    "1732": "unknown", 
    "2954": "future year" 
} 

Есть ли способ, с помощью JSON reads превратить этот JSON в случае класса Scala? то есть a Seq[Years] или Map[String, String], где год содержит год и описание.

Для справки, это то, как вы определяете read для "простой" JSON структуры:

{ 
    "name": "george", 
    "age": 24 
} 

неявной JsReads

implicit val dudeReads = (
    (__ \ "name").read[String] and 
    (__ \ "age").read[Int] 
) (Dude) 

ответ

3

Подобный @ ответ Pranav, но более кратким:

Json.parse(""" 
    { 
     "1992": "this is dog", 
     "1883": "test string", 
     "1732": "unknown", 
     "2954": "future year" 
    } 
""").as[Map[String, String]] 

дает

Map[String,String] = Map(1992 -> this is dog, 1883 -> test string, 1732 -> unknown, 2954 -> future year) 

Reads Базовым определены here.

4

Преобразование строки JSON в JsValue, а затем использовать проверку на объект JsValue.

scala> val json: JsValue = Json.parse(""" 
| { 
| "1992": "this is dog", 
| "1883": "test string", 
| "1732": "unknown", 
| "2954": "future year" 
| } 
| """) 
json: play.api.libs.json.JsValue = {"1992":"this is dog","1883":"test string","1732":"unknown","2954":"future year"} 

scala> val valid = json.validate[Map[String,String]] 
valid: play.api.libs.json.JsResult[Map[String,String]] = JsSuccess(Map(1992 -> this is dog, 1883 -> test string, 1732 -> unknown, 2954 -> future year),) 

scala> valid match { 
| case s: JsSuccess[Map[String,String]] => println(s.get) 
| case e: JsError => println("Errors: " + JsError.toJson(e).toString()) 
| } 
Map(1992 -> this is dog, 1883 -> test string, 1732 -> unknown, 2954 -> future year) 
+0

Вы можете пропустить проверку и последующее совпадение, просто написать «val result = json.as [Map [String, String]]'. – Eric

+1

@Eric Метод as будет вызывать 'JsResultException', если путь не найден или преобразование невозможно. [Источник] (https://www.playframework.com/documentation/2.5.x/ScalaJson#Using-JsValue.as/asOpt) – Pranav

 Смежные вопросы

  • Нет связанных вопросов^_^