我有一个与 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 filesession1, err := conn.NewSession()if err != nil { panic("Failed to create session: " + err.Error())}defer session1.Close()var tmpFileName bytes.Buffersession1.Stdout = &tmpFileNameif err := session1.Run("mktemp"); err != nil { panic("Failed to run: " + err.Error())}// Write json to temp filesession2, 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())}
1 回答
函数式编程
TA贡献1807条经验 获得超9个赞
您可以使用 json。元帅缩进
:
out, err := json.MarshalIndent(json.RawMessage(jsonData), "", " ")
if err != nil {
panic(err)
}
cmd := exec.Command("echo", string(out))
cmd.Stdout = os.Stdout
if 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)
}
- 1 回答
- 0 关注
- 178 浏览
添加回答
举报
0/150
提交
取消