2016-12-20 3 views
0

Ich muss einen Json mit 2 Elementen erstellen. Das erste Element ist eine Liste und das zweite Element ist ein einfaches Schlüssel/Wert-Paar. Meine Ausgabe sieht wie folgt aus:Erstellen Json von Scala-Objekt mit Liste

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

Im Beispiel ist das erste Element tables die Liste der table ist. Das zweite Element ist paid.

Ich versuchte es mit play.api.libs.json Lib, aber fest, während zweites Element hinzufügen.

Mein Code sieht wie folgt aus:

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) 

Dieser Code druckt Json als:

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

Ich bin nicht sicher, wie das zweite Element in diesem json hinzuzufügen. irgendein Vorschlag, wie zu , das zu lösen.

+0

würde nicht 'Json.obj ("Tabellen" -> inputsSeq , "bezahlt" -> 219) 'mach den Trick? –

+0

Ja .. Danke .. das hat es getan. Erwartet Json.obj() eine Karte? – Alok

+0

Ich überschreibe tostring() -Methode von Input-Case-Klasse, um "Sn:" String hinzuzufügen, wenn es in Json konvertiert wird. Aber nach dieser Methode sehe ich "sn:" wird nicht hinzugefügt, wenn Objekt in Json konvertiert wird. Fehle ich hier etwas? – Alok

Antwort

0

Json.obj akzeptiert mehrere Paare von (String, JsValueWrapper) als Argumente:

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

So können Sie beide Elemente wie folgt hinzu:

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

Nein, ich wusste nicht, wie ich es hinzufügen soll. Mein Ziel war es, ein Scala-Objekt zu erstellen, das sowohl bezahlte als auch Tabellenvariable enthält. Und wenn ich es in Json umwandle, würde es erzeugt werden. – Alok

+0

Ich sehe, ich habe die Frage missverstanden. Ich habe die Antwort bearbeitet – DeadNight

+0

Ich override tostring() -Methode der Eingabe Fallklasse, um "sn:" Zeichenfolge hinzuzufügen, wenn es in Json konvertiert wird. Aber nach dieser Methode sehe ich "sn:" wird nicht hinzugefügt, wenn Objekt in Json konvertiert wird. Fehle ich hier etwas? – Alok