Golang如何从URL读取JSON数据并解码存储到变量中

Golang如何从URL读取JSON数据并解码存储到变量中 我们从一个URL获取JSON格式的数据。 例如:

curl -s http://mydata.mygolang.com/getstatus.php
{"status":"success","brand_name":"NO","domain_name":"NO","expire_date":"2021-05-21"}

这是我们得到的数据。 现在我想将 statusbrand_namedomain_nameexpire_date 分别存储到不同的变量中。 例如,将 status 存入 status 变量,brand_name 存入 brand 变量,依此类推。 我没有找到解决方案,有人能在这方面提供帮助吗?


更多关于Golang如何从URL读取JSON数据并解码存储到变量中的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

那么,你可以解码到特定的结构体或一个接口类型的映射。 例如

func main() {
	byt := []byte(`{"status":"success","brand_name":"NO","domain_name":"NO","expire_date":"2021-05-21"}`)

	// 使用结构体
	var dt Autogenerated
	if err := json.Unmarshal(byt, &dt); err == nil {
		fmt.Println(dt.Status)
	}

	// 使用映射
	var dat map[string]interface{}
	if err := json.Unmarshal(byt, &dat); err == nil {
		fmt.Println(dat["status"])
	}
}

你可以使用这个页面 https://mholt.github.io/json-to-go/ 将 JSON 转换为 Go 结构体。

更多关于Golang如何从URL读取JSON数据并解码存储到变量中的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Go中从URL读取JSON数据并解码到变量中,可以通过以下步骤实现:

package main

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
)

// 定义结构体来映射JSON字段
type ResponseData struct {
    Status     string `json:"status"`
    BrandName  string `json:"brand_name"`
    DomainName string `json:"domain_name"`
    ExpireDate string `json:"expire_date"`
}

func main() {
    // 发送HTTP GET请求
    resp, err := http.Get("http://mydata.mygolang.com/getstatus.php")
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    // 读取响应体
    body, err := io.ReadAll(resp.Body)
    if err != nil {
        panic(err)
    }

    // 解码JSON到结构体
    var data ResponseData
    err = json.Unmarshal(body, &data)
    if err != nil {
        panic(err)
    }

    // 将结构体字段赋值给独立变量
    status := data.Status
    brand := data.BrandName
    domain := data.DomainName
    expireDate := data.ExpireDate

    // 使用变量
    fmt.Printf("Status: %s\n", status)
    fmt.Printf("Brand: %s\n", brand)
    fmt.Printf("Domain: %s\n", domain)
    fmt.Printf("Expire Date: %s\n", expireDate)
}

如果需要直接解码到独立变量而不使用结构体,可以使用匿名结构体:

package main

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
)

func main() {
    resp, err := http.Get("http://mydata.mygolang.com/getstatus.php")
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, err := io.ReadAll(resp.Body)
    if err != nil {
        panic(err)
    }

    // 使用匿名结构体解码
    var result struct {
        Status     string `json:"status"`
        BrandName  string `json:"brand_name"`
        DomainName string `json:"domain_name"`
        ExpireDate string `json:"expire_date"`
    }

    err = json.Unmarshal(body, &result)
    if err != nil {
        panic(err)
    }

    // 赋值给独立变量
    status := result.Status
    brand := result.BrandName
    domain := result.DomainName
    expireDate := result.ExpireDate

    fmt.Printf("Status: %s\n", status)
    fmt.Printf("Brand: %s\n", brand)
    fmt.Printf("Domain: %s\n", domain)
    fmt.Printf("Expire Date: %s\n", expireDate)
}

如果JSON字段名与变量名不同,可以使用json:"field_name"标签来指定映射关系。

回到顶部