2015-07-02 5 views
0

Я хотел бы написать читатель JSon для такого JsonJson читатель с различным типом в массиве

{ 
     "headers": [ 
      { 
       "id": "time:monthly", 
       "type": "a" 
      }, 
      { 
       "id": "Value1", 
       "type": "b" 
      }, 
      { 
       "id": "Value2", 
       "type": "b" 
      } 
     ], 
     "rows": [ 
      [ 
       "2013-01", 
       4, 
       5 
      ], 
      [ 
       "2013-02", 
       3, 
       6 
      ] 
     ] 
    } 

Я знаю (спасибо заголовка), что в элементах строк первого элемент имеет типа, a, второй и третий будут иметь тип b. Моя цель - создать строку объекта (List[a],List[b]) ( ). Количество элементов типа a и b меняется, поэтому я использую List). Мой вопрос: как я могу анализировать строки или как я могу прочитать массив Json с другим типом объекта и без id?

+0

Я пробовал JSON на http://jsonlint.com, и он кажется недействительным. Ты можешь починить это? Благодарю. – facundofarias

+1

Что вы пробовали? – Garry

+0

'rows' часть вашей строки json недействительна json. –

ответ

0

У меня возникнет соблазн установить модель с классами корпусов и микшировать исходный json-ридер для игрового фрейма с пользовательским для ваших строк.

import play.api.libs.json._ 

    case class Header(id: String, `type`: String) 
    case class Row(a: String, b: Int, c: Int) 
    case class Data(headers: Seq[Header], rows: Seq[Row]) 

    object RowReads extends Reads[Row] { 
     def reads(js: JsValue) = js match { 
     case JsArray(Seq(a,b,c)) => 
      (a,b,c) match { 
      case (a: JsString, b: JsNumber, c: JsNumber) => 
       JsSuccess(Row(a.value,b.value.toInt,c.value.toInt)) 
      case _ => JsError("nope") 
      } 
      case _ => JsError("nope") 
     } 
    } 

    object Formats { 
     implicit val headerReads = Json.reads[Header] 
     implicit val rowReads = RowReads 
     implicit val dataReads = Json.reads[Data] 

     def readIt(js: JsValue) = { 
     Json.fromJson[Data](js: JsValue) 
     } 
    } 

Для получения более подробной информации. https://playframework.com/documentation/2.4.x/ScalaJson

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