Golang解析text/plain响应的方法与技巧
Golang解析text/plain响应的方法与技巧
大家好,我想知道如何解析一个 text/plain 类型的响应。假设页面 http://test.com 的 curl 响应如下:
123abc
456.12.3
789.45.12
78.45.12
如何创建一个数组,使其包含响应中的所有值,但排除此示例中的第一行 123abc?
感谢您的帮助。
9 回复
关于删除第一行呢? 非常感谢各位朋友的帮助 🙂
这个响应看起来不像 HTML,而像是 text/plain。我说得对吗?
这看起来不像是HTML,但 strings.Split() 可以帮助你。
还有一种可能性是,即使调用没有返回错误,response.Body 也可能为 nil。最好也检查一下这种情况。
我在上一篇文章中漏掉了一个下划线。要排除第一个元素,可以这样做 🙂
allExceptFirst := items[1:]
for _, str := range allExceptFirst {
fmt.Println(str)
}
所以我应该做的是执行一个 http.Get() 并将其保存到一个变量中,使用 defer 延迟关闭,然后使用 strings.Split() 吗?
func main() {
fmt.Println("hello world")
}
是的。可能类似于这样:
url := "http://test.com"
response, err := http.Get(url)
if err != nil {
log.Fatal(err)
}
defer response.Body.Close()
responseData, err := ioutil.ReadAll(response.Body)
if err != nil {
log.Fatal(err)
}
responseString := string(responseData)
items := Split(responseString, ",")
for str:= range items {
fmt.println(str)
}
在Golang中解析text/plain响应并排除特定行,可以使用以下方法:
package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
resp, err := http.Get("http://test.com")
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
lines := strings.Split(string(body), "\n")
var result []string
for i, line := range lines {
if i == 0 {
continue // 跳过第一行
}
if line != "" { // 可选:跳过空行
result = append(result, line)
}
}
fmt.Printf("解析结果: %v\n", result)
}
如果需要处理更复杂的情况,比如按特定格式解析,可以使用以下方法:
func parseTextPlainResponse(body string) []string {
scanner := bufio.NewScanner(strings.NewReader(body))
var values []string
firstLine := true
for scanner.Scan() {
if firstLine {
firstLine = false
continue
}
line := strings.TrimSpace(scanner.Text())
if line != "" {
values = append(values, line)
}
}
return values
}
如果响应中包含数字和点号组合,需要进一步处理:
func parseResponseWithValidation(body string) []string {
lines := strings.Split(strings.TrimSpace(body), "\n")
var validLines []string
for i := 1; i < len(lines); i++ {
line := strings.TrimSpace(lines[i])
if line == "" {
continue
}
// 可以添加额外的验证逻辑
if strings.Contains(line, ".") {
validLines = append(validLines, line)
}
}
return validLines
}
使用示例:
resp, _ := http.Get("http://test.com")
body, _ := io.ReadAll(resp.Body)
parsedData := parseTextPlainResponse(string(body))
fmt.Println(parsedData) // 输出: [456.12.3 789.45.12 78.45.12]

