我正在创建一个 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/