3 回答
TA贡献1876条经验 获得超6个赞
这段基于示例的代码应该为您完成;http://blog.golang.org/laws-of-reflection
import "reflect"
for _, value := range jsonParser.Data {
s := reflect.ValueOf(&value).Elem()
typeOfT := s.Type()
for i := 0; i < s.NumField(); i++ {
f := s.Field(i)
fmt.Print("key: ", typeOfT.Field(i).Name, "\n")
fmt.Print("value: ", f.Interface(), "\n")
}
}
请注意,在您的原始代码中,循环正在迭代名为Data. 这些东西中的每一个都是该匿名结构类型的对象。那时您还没有处理字段,从那里,您可以利用该reflect包打印结构中字段的名称和值。您不能仅range在本机上遍历结构,操作未定义。
TA贡献1779条经验 获得超6个赞
这是我们在评论中讨论的另一种方法:
请记住,虽然这比反射更快,但直接使用结构字段并将其设为指针 ( Data []*struct{....})仍然更好、更有效。
type ImgurJson struct {
Status int16 `json:"status"`
Success bool `json:"success"`
Data []map[string]interface{} `json:"data"`
}
//.....
for i, d := range ij.Data {
fmt.Println(i, ":")
for k, v := range d {
fmt.Printf("\t%s: ", k)
switch v := v.(type) {
case float64:
fmt.Printf("%v (number)\n", v)
case string:
fmt.Printf("%v (str)\n", v)
case bool:
fmt.Printf("%v (bool)\n", v)
default:
fmt.Printf("%v (%T)\n", v, v)
}
}
}
TA贡献1875条经验 获得超3个赞
您还可以在嵌套结构上使用普通的 golang for 循环进行迭代。
type ImgurJson struct {
Status int16 `json:"status"`
Success bool `json:"success"`
Data []struct {
Width int16 `json:"width"`
Points int32 `json:"points"`
CommentCount int32 `json:"comment_count"`
TopicId int32 `json:"topic_id"`
AccountId int32 `json:"account_id"`
Ups int32 `json:"ups"`
Downs int32 `json:"downs"`
Bandwidth int64 `json:"bandwidth"`
Datetime int64 `json:"datetime"`
Score int64 `json:"score"`
Account_Url string `json:"account_url"`
Topic string `json:"topic"`
Link string `json:"link"`
Id string `json:"id"`
Description string`json:"description"`
CommentPreview string `json:"comment_preview"`
Vote string `json:"vote"`
Title string `json:"title"`
Section string `json:"section"`
Favorite bool `json:"favorite"`
Is_Album bool `json:"is_album"`
Nsfw bool `json:"nsfw"`
} `json:"data"`
}
func parseJson(file string) {
jsonFile, err := ioutil.ReadFile(file)
if err != nil {
...
}
jsonParser := ImgurJson{}
err = json.Unmarshal(jsonFile, &jsonParser)
for i :=0; i<len(jsonParser.Data); i++ {
fmt.Print("key: ", jsonParser.Data[i].TopicId, "\n")
}
}
- 3 回答
- 0 关注
- 305 浏览
添加回答
举报