gpt4 book ai didi

json - Scala 创建多行 JSON 字符串

转载 作者:行者123 更新时间:2023-12-04 19:26:20 25 4
gpt4 key购买 nike

我正在尝试在 Scala 中创建一个多行字符串,如下所示。

val errorReport: String =
"""
|{
|"errorName":"blah",
|"moreError":"blah2",
|"errorMessage":{
| "status": "bad",
| "message": "Unrecognized token 'noformatting': was expecting 'null', 'true', 'false' or NaN
at [Source: (ByteArrayInputStream); line: 1, column: 25]"
| }
|}
"""
.stripMargin

这是一个嵌套的 JSON,当我打印它时它没有正确显示。 message场内 errorMessage (这是在 getMessage 的实例上调用 Throwable 的输出)导致问题,因为它之前看起来有一个换行符
at [Source: ... .

如果我去掉那一行,JSON 就会正确显示。任何有关如何正确格式化的想法表示赞赏。

编辑:问题在于换行符。所以我认为问题更简洁 - 如何处理三重引号内的换行符,以便它仍然被识别为 JSON?

编辑 2: message由一个变量设置,如下所示:
"message": "${ex.getMessage}"
哪里 exThrowable .内容示例 getMessage上面提供了电话。

最佳答案

我假设您的问题与 JSON 无关,并且您只是询问如何在不违反 Scala 代码中的水平 80 个字符限制的情况下创建非常宽的字符串。幸运的是,Scala 的字符串字面量至少具有以下属性:

  • 您可以使用引号将普通代码转换为字符串文字模式 "..."和三重引号 """...""" .
  • 您可以使用 ${...} 从字符串文字模式到普通代码模式。
  • 字符上的自由幺半群被具体化为方法,即有 +连接字符串文字的操作。
  • 使用 | 可以使整个结构对空白和缩进具有鲁棒性和 stripMargin .

  • 总之,它允许您在不违反水平字符限制的情况下写下任意字符串文字,以一种强大的 w.r.t.缩进。

    在这种特殊情况下,您希望在环境 scala 代码中换行而不在文本中引入换行符。为此,您只需
  • 通过关闭 """ 退出字符串文字模式
  • 插入连接运算符 +在代码模式
  • 换行
  • 随心所欲地缩进
  • 通过打开 """ 再次进入字符串文字模式

  • 那是,
    """blah-""" +
    """blah"""

    将创建字符串 "blah-blah" , 在生成的字符串中没有换行符。

    应用于您的具体问题:
    val errorReport: String = (
    """{
    | "errorName": "blah",
    | "moreError": "blah2",
    | "errorMessage": {
    | "status": "bad",
    | "message": "Unrecognized token 'noformatting'""" +
    """: was expecting 'null', 'true', 'false' or NaN at """ +
    """[Source: (ByteArrayInputStream); line: 1, column: 25]"
    | }
    |}
    """
    ).stripMargin

    也许一个更易读的选择是将冗长的消息与整齐缩进的 JSON 分开构造,然后使用字符串插值来组合两个组件:
    val errorReport: String = {
    val msg =
    """Unrecognized token 'noformatting': """ +
    """was expecting 'null', 'true', 'false' or NaN at """ +
    """[Source: (ByteArrayInputStream); line: 1, column: 25]"""

    s"""{
    | "errorName": "blah",
    | "moreError": "blah2",
    | "errorMessage": {
    | "status": "bad",
    | "message": "${msg}"
    | }
    |}
    """
    }.stripMargin

    如果消息本身包含换行符

    由于 JSON 不允许多行字符串文字,因此您必须执行其他操作:
  • 要删除换行符,请使用 .replaceAll("\\n", "")或者更确切地说 .replaceAll("\\n", " ")
  • 使用转义序列对换行符进行编码 \n , 使用 .replaceAll("\\n", "\\\\n") (是的...反斜杠...)
  • 关于json - Scala 创建多行 JSON 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55461512/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com