2017-05-14 4 views
0

Ich verwende akka mit spray json-Unterstützung, für die ich Wert in der erhaltenen JSON bearbeiten muss.So bearbeiten Sie ein vorhandenes JSON-Objekt mit sprayJSON

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) 
} 

In meinem Anwendungsfall erhalte ich die json mit orderTag Wert als null, alles, was ich tun muß, ist der orderTag Wert mit bearbeiten und dann verwenden, als Einheit value.Is es möglich, schreiben/bearbeiten JSONObject und Wie das zu tun ?

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") 
     } 
    } 

} 

Antwort

0

können Sie bearbeiten nur die json AST wie ..

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"} 
""" 
Verwandte Themen