2012-07-09 47 views
1

我可以如何轻松地转换数据? 我可以搜索哪些有趣的数据,f。例如:用升降机转换json

json \\ fieldName1 \\ fieldName2 \\ fieldName3 

但我怎么能这个搜索修改值? F。前

json transform{ 
    case JField(x,y) => JField(x, z) 
} 
+0

编辑:我试着:从查询中获取字段,然后为每个Jfield调用方法转换,我检查当前字段是否来自查询字段。但是这很丑陋 – user1511848 2012-07-09 12:41:19

+1

你可以使用''extract''(参考lift-json文档https://github.com/lift/lift/tree/master/framework/lift-base/lift-json/,section “提取值”),以便将json AST转换为一个case类的列表,然后使用通常的收集方法(如filter和map)来完成转换? – 2012-07-09 13:54:02

回答

1

如果使用lift-json,你得到你想要的东西:

scala> import net.liftweb.json._ 
scala> import net.liftweb.json.JsonDSL._ 

scala> val json = 
    ("person" -> 
    ("name" -> "Joe") ~ 
    ("age" -> 35) ~ 
    ("spouse" -> 
     ("person" -> 
     ("name" -> "Marilyn") ~ 
     ("age" -> 33) 
    ) 
    ) 
) 
scala> json transform { 
     case JField("name", JString(s)) => JField("NAME", JString(s.toUpperCase)) 
     } 
res8: net.liftweb.json.JsonAST.JValue = JObject(List(JField(person,JObject(List(
JField(NAME,JString(JOE)), JField(age,JInt(35)), JField(spouse,JObject(List(
JField(person,JObject(List(JField(NAME,JString(MARILYN)), JField(age,JInt(33))))))))))))) 

以上代码是从链接页面复制。

如果您不使用lift-json,您可以查看kiama,如this answer中所示。

+0

用于引用Kiama。那个项目很棒! – 2012-07-10 06:57:06