zl程序教程

您现在的位置是:首页 >  后端

当前栏目

scala中如何优雅的写json字符串

scalaJSONJSON 如何 字符串 优雅
2023-09-11 14:16:24 时间

在实际工作中,需要在程序中直接组装json字符串,为了让程序易读,需要使用到scala中的多行文本及管道|

1. 相关知识点

scala中的字符串类就是java中的java.lang.String类,在Predef.scala中定义如下: type String = java.lang.String

scala同时为String提供了一个富封装类: scala.collection.immutable.StringOps、StringLike

scala可以将java.lang.String类自动转换为StringOps类。这样就可以非常方便地使用capitalize()、lines()、reverse()、stripMargin等方法相对较便捷的方法

在scala里,对于字符串的支持中最显著的一个特性是对于heredoc的支持,即对多行文本的支持。

在scala里创建多行字符串非常容易,只要将多行字符串放在三个双引号里就行。

scala会将三个双引号间的内容保持原样,在scala里称为原始字符串。比如可以在原始字符串里直接使用双引号或者反斜杠

如果不想使用缩进的话可以考虑使用RichString的stripMargin()方法,这个方法需要配合管道符号“|”使用。stripMargin()会去掉先导管道符“|”前所有的空白或控制字符,如果出现在其他地方,而不是每行的开始,就会保留管道符。

2. 代码示例

  def main(args: Array[String]): Unit = {
    test1();
  }

  def test1() = {
    val typeRef = new TypeReference[java.util.Map[String,Object]](){}
    var info ="""
            [
                {
                    "name":"张三",
                    "ange":29,
                    "addr":"广州天河区"
                }
            ]
         """.stripMargin
    println(info)
    println(JSON.parseObject(info,typeRef))

    info ="""
            |[
            |    {
            |        "name":"张三",
            |        "ange":29,
            |        "addr":"广州天\n\t河区 ||"
            |    }
            |]
             """.stripMargin
    println(info)
    println(JSON.parseObject(info,typeRef))
  }

输出如下: