angelokh
angelokh

Reputation: 9428

Play 2.1 Scala JsValue to Java ObjectNode

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

Answers (1)

fedragon
fedragon

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

Related Questions