Как я могу преобразовать JSON с помощью Scala-лифта?
Как мне преобразовать json ниже, используя scala lift на основе атрибута родного брата? В json ниже я хочу закодировать значение в атрибуте "value", если атрибут "type" родного брата - "html"
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)
1 ответ
Решение
Вот одно из возможных решений:
1) сначала найдите данные json с типом html
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)
})