2016-12-20 9 views
0

Мне нужно создать Json с двумя элементами. Первый элемент - это List, а второй элемент - простая пара ключ-значение. Мой вывод выглядит следующим образом:Создайте Json из объекта scala со списком

"{ 
    "tables":[ 
    {"table": "sn: 2134"}, 
    {"table": "sn: 5676"}, 
    {"table": "sn: 4564"}, 
    ], 
    "paid": 219 
    }" 

В этом примере первый элемент tables который Список table. Второй элемент - paid.

Я попробовал это, используя play.api.libs.json lib, но застрял при добавлении второго элемента.

Мой код выглядит следующим образом:

case class Input(table:String){ 
    override def toString = s""""table" : "sn: $table"""" 
    } 
implicit val userFormat = Json.format[Input] 
val inputsSeq = Seq(Input(table1),Input(table2),Input(table3)) 
val users = Json.obj("tables" -> inputsSeq) 
println(users) 

Этот код печати JSon как:

"{ 
     "tables":[ 
     {"table": "sn: 2134"}, 
     {"table": "sn: 5676"}, 
     {"table": "sn: 4564"}, 
     ] 
} 

Я не уверен, как добавить второй элемент в этом формате JSON. любое предложение, как решить это.

+0

бы не 'Json.obj ("Таблицы" -> inputsSeq , "платный" -> 219) 'трюк? –

+0

Да .. Спасибо .. что сделал. Ожидает ли Json.obj() карту? – Alok

+0

Я переопределяю tostring() метод класса ввода case, чтобы добавить строку «sn:», когда он преобразуется в Json. Но после этого метода я вижу, что «sn:» не добавляется, когда объект преобразован в Json. Мне что-то здесь не хватает? – Alok

ответ

0

Json.obj принимает несколько пар (String, JsValueWrapper) в качестве аргументов:

object Json { 
    ... 
    def obj(fields: (String, JsValueWrapper)*): JsObject = JsObject(fields.map(f => (f._1, f._2.asInstanceOf[JsValueWrapperImpl].field))) 
    ... 
} 

Таким образом, вы можете добавить оба элемента, как это:

val users = Json.obj("tables" -> inputsSeq, "paid" -> 219) 
+0

Нет, я не знал, как добавить его. Моя цель состояла в создании объекта scala, который имеет как платные, так и табличные переменные. И когда я конвертирую его в Json, он будет сгенерирован. – Alok

+0

Вижу, я неправильно понял вопрос. Я отредактировал ответ – DeadNight

+0

I переопределить метод tostring() класса case ввода, добавить строку «sn:», когда он будет преобразован в Json. Но после этого метода я вижу, что «sn:» не добавляется, когда объект преобразован в Json. Мне что-то здесь не хватает? – Alok