如何使用sprayJSON编辑现有的JSON对象

时间:2017-05-14 06:17:53

标签: json scala akka-http spray-json

我正在使用akka with spray json支持,我需要在收到的json中编辑值。

import akka.http.scaladsl.server.Directives
import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport
import spray.json._


final case class Item(name: String, id: Long)
final case class Order(items: List[Item],orderTag:String)


trait JsonSupport extends SprayJsonSupport with DefaultJsonProtocol {
  implicit val itemFormat = jsonFormat2(Item)
  implicit val orderFormat = jsonFormat2(Order)
}

在我的用例中,我将orderTag值作为null接收json,我需要做的就是编辑orderTag值,然后将其用作实体值。是否可以编写/编辑jsonObject以及如何做到这一点?

class MyJsonService extends Directives with JsonSupport {

  // format: OFF
  val route =
    get {
      pathSingleSlash {
        complete(Item("thing", 42)) // will render as JSON
      }
    } ~
    post {
      entity(as[Order]) { order => // will unmarshal JSON to Order
        val itemsCount = order.items.size
        val itemNames = order.items.map(_.name).mkString(", ")
        complete(s"Ordered $itemsCount items: $itemNames")
      }
    }

}

1 个答案:

答案 0 :(得分:0)

您可以像编辑json AST一样编辑..

val json = """{"orderTag":null}"""
val jsVal = json.parseJson
val updatedJs = if (jsObj.fields.get("orderTag") == Some(JsNull)) {
JsObject(jsObj.fields + ("orderTag" -> JsString("new tag")))
} else {
    jsObj
}
updatedJs.compactPrint
res26: String = """
 {"orderTag":"new tag"}
"""