【问题标题】:Convert line endings to "\n" literals [closed]将行尾转换为 "\n" 文字 [关闭]
【发布时间】:2019-05-25 13:21:32
【问题描述】:

我有一个有趣的问题要解决。由于我必须与之交谈的工具,我需要将换行符转换为文字字符串\n 我有以下数据

{"name": 2019-05-25,
"tracker": {
"project": {
  "uri": "/project/87",
  "name": "Allen's Test"
},
"uri": "/tracker/57483",
"name": "Tasks"
        },
"description": "[{Table

||Stack
||Current Version
||New Version
||Changes
|common
|1.0.214
|1.0.214
|* blah - [#345|https://blah.com/345]

|workflow
|2.2.23
|2.2.23
|* [ES-12345] blah - [#1087|https://blah.com/1087]

}]",
"descFormat": "Wiki"}

所以基本上不是多行字符串,我需要将其转换为带有 \n 的单行字符串,后端的工具将在其中转换它。我正在使用 go 并且不太确定从哪里开始。我假设我需要原始字符串,但许多源代码是内置换行符的 api 调用。

任何帮助将不胜感激。

【问题讨论】:

  • 你试过什么?包括您的代码。你遇到了什么问题?
  • 这是一个有点奇怪的问题。换行符是唯一需要转换的东西吗?您确定您不需要将整个字符串正确转义为您需要的任何格式吗?
  • @Flimzy 确实只是换行符。此数据是更大的 JSON blob 的一部分,需要成为键值对中的一个值
  • 那么如果该数据中有一个文字 \n 字符串呢?你不想逃避吗?

标签: string go eol


【解决方案1】:

例如,

package main

import (
    "fmt"
    "strings"
)

func main() {
    s := `"project": {
  "uri": "/project/87",
  "name": "Allen's Test"
},`
    fmt.Println(s)
    s = strings.ReplaceAll(s, "\n", `\n`)
    fmt.Println(s)
}

游乐场:https://play.golang.org/p/lKZw78yOuMc

输出:

"project": {
  "uri": "/project/87",
  "name": "Allen's Test"
},
"project": {\n  "uri": "/project/87",\n  "name": "Allen's Test"\n},

在 Go 1.12 之前,写:

s = strings.Replace(s, "\n", `\n`, -1)

【讨论】:

  • 谢谢。这就是我最终做的。不太清楚为什么我第一次尝试它时它不起作用,但这正是我需要的。也感谢之前的 Go 1.12 作品。我的构建盒仍在 1.11 上。
【解决方案2】:

我感觉这是XY 问题...

但要简单地将换行字节 '\n' 替换为 2 字符字符串 \n,请使用:

strings.ReplaceAll(data, "\n", "\\n")

游乐场:https://play.golang.org/p/Xmg4pgqFy5O

输出:

{"name": 2019-05-25,\n"tracker": {\n"project": {\n  "uri": "/project/87",\n ....

注意:处理其他格式字符,例如制表符 (\t) 回车 (\r) 等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多