为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
波斯汪 2021-11-22 19:35:12
我有一个日志文件,其中每一行都是一个 JSON。由于一些 Nginx 安全原因,日志以十六进制格式保存(例如 char " 将转换为 \x22)。这是一个 JSON 行的示例: { "body_bytes_sent": "474", "params": {\x22device_id\x22: \x221234567890\x22} }我的目标:逐行读取文件。将每一行转换为可读格式{ "body_bytes_sent": "474", "params" : {"device_id": "1234567890"} }将此字符串转换为 JSON 对象,以便我可以对其进行操作。任何帮助将不胜感激。
查看完整描述

1 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

您可以使用strconv.Unquote将字符串转换为普通字符串:


package main


import (

    "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)

}


查看完整回答
反对 回复 2021-11-22
  • 1 回答
  • 0 关注
  • 228 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信