Reputation: 9428
Is there a better way to convert a scala JsValue (or JsArray) to java ObjectNode?
Scala:
object Event {
def getEventsJson(id: String, limit: Int): Option[JsArray] = {
val list = getEvents(id, limit)
val buffer = new scala.collection.mutable.ListBuffer[JsValue]
list.foreach(e => buffer += Json.toJson(e))
Json.toJson(buffer.toList) match {
case x: JsArray => Some(x)
case _ => None
}
}
}
Java:
ObjectNode result = Json.newObject();
Option<JsArray> eventsOpt = Event.getEventsJson(id, 3);
if (eventsOpt.isDefined()) {
result.put("events", play.libs.Json.parse(play.api.libs.json.Json.stringify(eventsOpt.get())));
}
** EDIT Changes based on @Freidereikhs comment
object Event {
def getEventsJson(convoId: String, limit: Int): Option[JsArray] = {
val jsonEvents = getEvents(convoId, limit).map(e => Json.toJson(e))
Json.toJson(jsonEvents) match {
case x: JsArray => Some(x)
case _ => None
}
}
}
Upvotes: 2
Views: 1050
Reputation: 884
I think you can improve this a little by replacing
val list = getEvents(id, limit)
val buffer = new scala.collection.mutable.ListBuffer[JsValue]
list.foreach(e => buffer += Json.toJson(e))
with
val jsonEvents = getEvents.map(e => Json.toJson(e))
Upvotes: 2