json - 如何在 GO 中将换行符转换为正确的 JSON?

标签 json string go string-literals

我有一些字符串想要转换为 JSON。这里使用encoding/json,没有尝试过其他包。

如果按原样保存,字符串可能包含换行符和其他会破坏 JSON 的内容。

如果我传递一个字符串文字,它就会起作用 - 它会在反斜杠前面添加反斜杠。如果我只传递一个常规字符串,它就不起作用。我似乎无法弄清楚是否有办法使用包含字符串文字的变量。

编辑:正如所指出的,这些不是相同的值,我有点理解这一点,但这并不能帮助我解决我的问题。

示例代码:

package main

import (
    "fmt"
    "encoding/json"
)

func main() {
    type Test struct {
        Input string
    }
    regularString := Test{"asd\nqwe"}
    out, err := json.Marshal(regularString)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(string(out))

    literalString := Test{`asd\nqwe`}
    out, err = json.Marshal(literalString )
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(string(out))
}

最佳答案

encoding/json 正确编码所有字符串值。

您的第一个示例按照您的预期工作,因为您使用解释的字符串文字,如果它包含 \n 序列,编译器会将其替换为换行符性格。

您的第二个示例无法按您的预期工作,因为您使用了原始字符串文字,如果它包含 \n 序列,则不会被替换,但这两个字符将保留在字符串中。这将被 encoding/json 正确转义,以保留在 JSON 输出中。

所以基本上

"asd\nqwe"`

`asd\nqwe`

是2个不同的字符串,它们不相等,因此它们的JSON转义值也不同。

检查Spec: String literals了解更多详情。

请注意,如果要使用原始字符串文字创建字符串值,则不能在其中使用转义序列。要在原始字符串文字中添加换行符,只需换行即可,如下所示:

s := `asd
qwe`

另一种选择是“破坏”字符串文字,并使用解释的字符串文字插入换行符(并连接各部分):

s := `asd` + "\n" + `qwe`

关于json - 如何在 GO 中将换行符转换为正确的 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53295953/

相关文章:

c++ - 将 _bstr_t com 属性分配给 LPCTSTR 是否安全?

C# 代码无法编译。 null 和 int 之间没有隐式转换

testing - Golang coverprofile 输出格式

ios - 使用 dataWithContentsOfURL : 继续获取 nil 而不是 JSON 文件

c# - 完整 .NET Framework 控制台应用程序中的 JSON 配置

python - 在某些情况下,汤很美味,但在其他情况下则不然。为什么?

html - 模板中的 bson.ObjectId

javascript - AngularJS - 按钮 - 在依赖之前调用函数或指令

C++:,当我使用字符串数组时,出现字符串下标超出范围

Go 语言字符串常量