将格式字符(如 \t 和 \n)添加到 JSON 字符串中,以便它们在 Linux 回显命令中工作

我有一个与 Linux 计算机的开放 ssh 连接。我正在创建一个临时文件,需要使用echo命令将格式化的Json写入其中。无论如何,我是否可以在必要时轻松添加\t和\n,以便最终在模板文件中格式化json?在我求助于创建一个函数之前,该函数解析它并手动添加\t和\n。


jsonData := "{\"data\":[{\"id\": \"1000\", \"name\":\"Product 1\"}, {\"id\": \"2000\", \"name\":\"Product 2\"}, {\"id\": \"3000\", \"name\":\"Product 3\"}]}"


// Create a temp file

session1, err := conn.NewSession()

if err != nil {

    panic("Failed to create session: " + err.Error())

}

defer session1.Close()


var tmpFileName bytes.Buffer

session1.Stdout = &tmpFileName

if err := session1.Run("mktemp"); err != nil {

    panic("Failed to run: " + err.Error())

}


// Write json to temp file

session2, err := conn.NewSession()

if err != nil {

    panic("Failed to create session: " + err.Error())

}

defer session2.Close()


if err := session2.Run("echo " + jsonData + ">> " + tmpFileName.String()); err != nil {

    panic("Failed to run: " + err.Error())

}


一只萌萌小番薯
浏览 188回答 1
1回答

函数式编程

您可以使用 json。元帅缩进:out, err := json.MarshalIndent(json.RawMessage(jsonData), "", "    ")if err != nil {    panic(err)}cmd := exec.Command("echo", string(out))cmd.Stdout = os.Stdoutif err := cmd.Run(); err != nil {    panic(err)}https://play.golang.org/p/J4Z5txNOmgP根据实现方式,您可能需要转义并显式引用格式化的 json 字符串。session2.Run// this is a naive single quote bash-specific escape, if this isn't// sufficient for your use case you'll have to improve on it.jsonData = strings.ReplaceAll(string(out), "'", `'"'"'`)cmd := fmt.Sprintf("echo '%s' >> %s", jsonData, tmpFileName)if err := session2.Run(cmd); err != nil {    panic(err)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go