Golang解析text/plain响应的方法与技巧

Golang解析text/plain响应的方法与技巧 大家好,我想知道如何解析一个 text/plain 类型的响应。假设页面 http://test.com 的 curl 响应如下:

123abc
456.12.3
789.45.12
78.45.12

如何创建一个数组,使其包含响应中的所有值,但排除此示例中的第一行 123abc? 感谢您的帮助。

9 回复

是的。

更多关于Golang解析text/plain响应的方法与技巧的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


关于删除第一行呢? 非常感谢各位朋友的帮助 🙂

这个响应看起来不像 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]
回到顶部