go - 如何解析文本并将其格式化以将其作为 json 数据发送

标签 go

我正在创建一个 Discord 机器人,它在一个非常流行的视频游戏服务器的 channel 上监听,他们有一个机器人,由大多数命令手动命令以宣布某些事情,比如 Boss 重生。以下是文本示例:

# Red Nose
Mon, 06:45 EST - Mon, 15:15 EST <Spawnable>

# Kutum
Mon, 09:25 EST - Mon, 17:55 EST [Window begins](in 2 hours)

# Karanda
Mon, 09:50 EST - Mon, 14:20 EST [Window begins](in 3 hours)

# Dastard Bheg
Mon, 11:15 EST - Mon, 19:45 EST [Window begins](in 4 hours)

# Nouver
Mon, 12:30 EST - Mon, 18:00 EST [Window begins](in 6 hours)

# Kzarka
Mon, 14:10 EST - Mon, 18:40 EST [Window begins](in 7 hours)

# Dim Tree Spirit
Mon, 15:50 EST - Tue, 00:20 EST [Window begins](in 9 hours)

# Giant Mudster
Mon, 16:55 EST - Tue, 01:25 EST [Window begins](in 10 hours)

我已将我的机器人连接到服务器并正常读取聊天消息,但我想知道解析此数据的最简洁方法是什么。我将像这样格式化数据:

type Boss struct {
    Name              string `json:"name"`
    SpawnWindowBegins string `json:"spawnWindowBegins"`
    TimeTilWindow     string `json:"timeTilWindow"`
}

例如我需要解析

Name = Red Nose
SpawnWindowBegins = Mon, 06:45 EST - Mon, 15:15 EST
TimeTilWindow = Spawnable || in X hours

这样我就可以通过 websocket 将数据发送到我的网站并处理我可以做的很好我只是不确定将该文本可靠地解析为结构的最佳方法。谢谢。

最佳答案

一般来说,我建议使用正则表达式来进行这种类型的解析。创建一个正则表达式来识别您的 key ,然后根据需要修补您的数据结构。

nameValueParseRegex := regexp.MustCompile(`^(.*) = (.*)$?\z`)

lines := []string{
    `Name = Red Nose`,
    `SpawnWindowBegins = Mon, 06:45 EST - Mon, 15:15 EST`,
    `Wrong format line`,
    `TimeTilWindow = Spawnable || in X hours`,
}

boss := Boss{}
for _, value := range lines {
    lineResult := nameValueParseRegex.FindAllStringSubmatch(value, -1)

    if lineResult != nil && len(lineResult) > 0 {

        if lineResult[0][1] == "Name" {
            boss.Name = lineResult[0][2]
        }

        if lineResult[0][1] == "SpawnWindowBegins" {
            boss.SpawnWindowBegins = lineResult[0][2]
        }

        if lineResult[0][1] == "TimeTilWindow" {
            boss.TimeTilWindow = lineResult[0][2]
        }

    }

}

s, _ := json.Marshal(boss)
fmt.Printf("%s", s)

输出:

{"name":"Red Nose","spawnWindowBegins":"Mon, 06:45 EST - Mon, 15:15 EST","timeTilWindow":"Spawnable || in X hours"}

关于go - 如何解析文本并将其格式化以将其作为 json 数据发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42625210/

相关文章:

go - 如何在go中编写包?

go - 如何使用 ECDSA 字符串私钥签署消息

json - 如何使用可用的属性从 json 中检索特定数据

go - go 工具存储在哪里?

go - 为什么我有一个死锁,即使它包含一个无限循环?

go - go语言make()中capacity的作用是什么?

go - 在 Golang 中设置绝对文件路径

arrays - 如何通过引用将结构数组作为接口(interface)传递

java - couchbase golang json 原子增量

Go:匿名函数