在scala中格式化JSON字符串
有没有一种直接的方法可以在scala中格式化JSON字符串 我有一个JSON字符串,如下所示:在scala中格式化JSON字符串,json,scala,formatting,Json,Scala,Formatting,有没有一种直接的方法可以在scala中格式化JSON字符串 我有一个JSON字符串,如下所示: val json = {"foo": {"bar": {"baz": T}}} 我是否可以使用函数f,以便: f(json) = { "foo": {"bar": {"baz": T} } } 我知道我在回答中所做的格式设计并不完美,但你明白
val json = {"foo": {"bar": {"baz": T}}}
我是否可以使用函数f
,以便:
f(json) = {
"foo":
{"bar":
{"baz": T}
}
}
我知道我在回答中所做的格式设计并不完美,但你明白我的意思。是的,不使用Play Framework可以完成吗?如果您使用的是
Play Framework
,您可以使用Json。prettyPrint
方法格式化JsValue
:
import play.api.libs.json.Json
val str = """{"foo": {"bar": {"baz": "T"}}}"""
val jsValue = Json parse str
// JsValue = {"foo":{"bar":{"baz":"T"}}}
Json prettyPrint jsValue
// String =
// {
// "foo" : {
// "bar" : {
// "baz" : "T"
// }
// }
// }
如果您使用的是
scala.util.parsing.json
,您必须自己创建这样的方法。例如:
def format(t: Any, i: Int = 0): String = t match {
case o: JSONObject =>
o.obj.map{ case (k, v) =>
" "*(i+1) + JSONFormat.defaultFormatter(k) + ": " + format(v, i+1)
}.mkString("{\n", ",\n", "\n" + " "*i + "}")
case a: JSONArray =>
a.list.map{
e => " "*(i+1) + format(e, i+1)
}.mkString("[\n", ",\n", "\n" + " "*i + "]")
case _ => JSONFormat defaultFormatter t
}
val jsn = JSON.parseRaw("""{"foo": {"bar": {"baz": "T"}, "arr": [1, 2, "x"]}, "foo2": "a"}""").get
// JSONType = {"foo" : {"bar" : {"baz" : "T"}, "arr" : [1.0, 2.0, "x"]}, "foo2" : "a"}
format(jsn)
// String =
// {
// "foo": {
// "bar": {
// "baz": "T"
// },
// "arr": [
// 1.0,
// 2.0,
// "x"
// ]
// },
// "foo2": "a"
// }
请注意,这不是一个有效的实现。我想我在某个地方读到Typesafe正在考虑将JSON处理分离出来,所以请先研究一下以应用@senia的解决方案 否则,看看Jackson——或者更准确地说,是: 我还听说孩子们真的很喜欢这本书,它显然也有很好的印刷品
val mapper = new ObjectMapper()
mapper.registerModule(DefaultScalaModule)
val writer = mapper.writerWithDefaultPrettyPrinter
val json = writer.writeValueAsString(Object value)