Go - 如何将包含十六进制字符的 txt 文件解码/转换为可读字符串

我有一个日志文件,其中每一行都是一个 JSON。由于一些 Nginx 安全原因,日志以十六进制格式保存(例如 char " 将转换为 \x22)。这是一个 JSON 行的示例:

 { "body_bytes_sent": "474", "params": {\x22device_id\x22: \x221234567890\x22} }

我的目标:

  1. 逐行读取文件。

  2. 将每一行转换为可读格式

    { "body_bytes_sent": "474", "params" : {"device_id": "1234567890"} }
  3. 将此字符串转换为 JSON 对象,以便我可以对其进行操作。

任何帮助将不胜感激。


波斯汪
浏览 229回答 1
1回答

jeck猫

您可以使用strconv.Unquote将字符串转换为普通字符串:package mainimport (    "encoding/json"    "fmt"    "strconv")func main() {    // this is what your input string looks like...    qs := "{\\x22device_id\\x22: \\x221234567890\\x22}"    // now let's convert it to a normal string    // note that it has to look like a Go string literal so we're    // using Sprintf    s, err := strconv.Unquote(fmt.Sprintf(`"%s"`, qs))    if err != nil {        panic(err)    }    fmt.Println(s)    // just for good measure, let's see if it can actually be decoded.    // SPOILER ALERT: It decodes just fine!    var v map[string]interface{}    if err := json.Unmarshal([]byte(s), &v); err != nil {        panic(err)    }    fmt.Println(v)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go