2013-12-15 6 views
0

Как преобразовать json ниже, используя scala lift на основе атрибута sibling? В приведенном ниже JSON, я хочу, чтобы закодировать значение в «значении» атрибут, если двойники атрибута «типа» является «HTML»Как преобразовать json с помощью scala lift?

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) 

ответ

2

Здесь находится из возможных решений:

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

Работает отлично! Благодаря! –