1

兄弟属性に基づいてスカラ リフトを使用して以下の json を変換するにはどうすればよいですか? 以下のjsonで、兄弟属性「type」が「html」の場合、「value」属性の値をエンコードしたい

val json = """
{
    "id" : "1B23423B",
    "payload" : {
        "list" : [ {
            "name" : "test",
            "data" : [ {
                "value" : "Some html",
                "type" : "html",
            }, {
                "value" : "some text",
                "type" : "text"
            }]
         }]
    }
}
"""
def encode(s:String):String = s + "encoded"
val newjson = js.transform { 
    case x if x == JField("type",JString("html")) => // somehow encode value??
}

println(newjson)
4

1 に答える 1

3

考えられる解決策は次のとおりです。

1) 最初にタイプ html のデータ json を見つけます

2) json 値の子を変換する

  val parsed = JsonParser.parse(jsonString)  

  def encode(s:String):String = s + "encoded"

  private def encodeValue(dataObject: JValue) = dataObject.transform{
    case JField("value", JString(value)) => JField("value", JString(encode(value)))
  }

  val newJson = parsed.transform({
    case dataObject @ JObject(fields) if fields.contains(JField("type", JString("html"))) => encodeValue(dataObject)
  })
于 2013-12-16T10:26:21.567 に答える