加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在scala中格式化JSON字符串

发布时间:2020-12-16 09:49:34 所属栏目:安全 来源:网络整理
导读:是否有一种直接的方式来格式化 scala中的 JSON字符串? 我有一个像这样的JSON字符串: val json = {"foo": {"bar": {"baz": T}}} 我可以使用函数f: f(json) = { "foo": {"bar": {"baz": T} } } 我知道我在答案中所做的格式并不完美,但你明白了.是的,可以在
是否有一种直接的方式来格式化 scala中的 JSON字符串?

我有一个像这样的JSON字符串:

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" + "  "*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,"foo2" : "a"}

format(jsn)
// String = 
// {
//   "foo": {
//     "bar": {
//       "baz": "T"
//     },//     "arr": [
//       1.0,//       2.0,//       "x"
//     ]
//   },//   "foo2": "a"
// }

请注意,这不是一种有效的实现.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读