2017-03-17 120 views
2

我想将jvalue转换为json字符串。这里是我的代码如下所示:将JValue转换为JSON字符串

import org.json4s._ 
import org.json4s.JsonDSL._ 
import org.json4s.native.JsonMethods._ 
import org.json4s.DefaultFormats._ 

object Json4sTest { 

    def main(arg: Array[String]) { 
    var json = parse("""{"name":"luca", "id": "1q2w3e4r5t", "age": 26, "inner": { "age": 27 }, "url":"http:// www.nosqlnocry.wordpress.com"}""") 
// println(json) 

    val a: List[Map[String, JValue]] = List(Map("inner/age" -> 35, "age" -> 27), Map("name" -> "foo")) 
    val r = jsonFieldUpdater(json, a) 
    println(r) 

     } 


     def jsonFieldUpdater(json: JValue, list: List[Map[String, JValue]]): JValue = 
    // 
     } 
    } 

得到我的结果为:

JObject(List((name,JString(foo)), (id,JString(1q2w3e4r5t)), (age,JInt(27)), (inner,JObject(List((age,JInt(35))))), (url,JString(http:// www.nosqlnocry.wordpress.com)))) 

我要寻找一个JSON字符串输出为:

{"name":"luca", "id": "1q2w3e4r5t", "age": 27, "inner": { "age": 35 }, "url":"http:// www.nosqlnocry.wordpress.com"} 
+0

我能够使用(压缩(render(r)))。toString()来完成这项工作。但我不确定它是否正确。 –

+0

如果我的回答是正确的,我可以建议编辑标题吗?我想,例如'将JValue转换为字符串表示'可能更合适。你也可以考虑标记我的答案是正确的。如果不是,请忽略此评论。 – Rumid

回答

2

如果你要打印字符串表示JValue,您可以通过以下方式执行: println(compact(render(r)))

这样的方法compact(render(r))收到String看起来是这样的:

{"lotto":{"lotto-id":5,"winning-numbers":[2,45,34,23,7,5,3],"winners":[{"winner-id":23,"numbers":[2,45,34,23,3,5]},{"winner-id":54,"numbers":[52,3,12,11,18,22]}]}} 

或者您可以使用println(pretty(render(r)))获得相当String是这样的:从documentation使用

{ 
    "lotto":{ 
    "lotto-id":5, 
    "winning-numbers":[2,45,34,23,7,5,3], 
    "winners":[{ 
     "winner-id":23, 
     "numbers":[2,45,34,23,3,5] 
    },{ 
     "winner-id":54, 
     "numbers":[52,3,12,11,18,22] 
    }] 
    } 
} 

例子。