我制作了一些从toggl api接收数据的应用程序。 我尝试在[Go]的数组列表中保存[] byte响应数据,以便稍后修改数据。 我想知道如何将响应[] byte json样式数据转换和存储为数组列表。
main.go
type togglData struct {
}
func GetTogglReports() []byte {
//some code
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
data, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
return data
}
func makeSurveyText() {
// I want to save []byte data GetTogglReports() in array list here.
var togglData []togglData
}
数据是这样的:
{
"total_grand":36004000,
"total_billable":14400000,
"total_currencies":[{"currency":"EUR","amount":40}],
"data": [
{
"id":193009951,
"title":{"project":"Toggl Development","client":null},
"time":14400000,
"total_currencies":[{"currency":"EUR","amount":0}],
"items":[
{
"title":{"time_entry":"Hard work"},
"time":14400000,
"cur":"EUR",
"sum":0,
"rate":50
}
]
},{
"id":null,
"title":{"project":null,"client":null},
"time":7204000,
"total_currencies":[],
"items":[
{
"title":{"time_entry":"No title yet"},
"time":1000,
"cur":"EUR",
"sum":0,
"rate":50
}
]
}
]
}
答案 0 :(得分:6)
第一步将您的JSON转换为go结构。为此,我总是使用https://mholt.github.io/json-to-go/
这样的在线转换器type AutoGenerated struct {
TotalGrand int `json:"total_grand"`
TotalBillable int `json:"total_billable"`
TotalCurrencies []struct {
Currency string `json:"currency"`
Amount int `json:"amount"`
} `json:"total_currencies"`
Data []struct {
ID int `json:"id"`
Title struct {
Project string `json:"project"`
Client interface{} `json:"client"`
} `json:"title"`
Time int `json:"time"`
TotalCurrencies []struct {
Currency string `json:"currency"`
Amount int `json:"amount"`
} `json:"total_currencies"`
Items []struct {
Title struct {
TimeEntry string `json:"time_entry"`
} `json:"title"`
Time int `json:"time"`
Cur string `json:"cur"`
Sum int `json:"sum"`
Rate int `json:"rate"`
} `json:"items"`
} `json:"data"`
}
然后
http.NewRequest("GET", url, nil)
,client.Do(req)
和byte_array,err:=ioutil.ReadAll(resp.Body)
make
或new
创建该结构的实例json.Unmarshal(byte_array, &instance_of_struct)
然后您将拥有一个包含JSON数据的结构