您好,我刚学golang,有个解析json的问题请教各位,谢谢了,我写了以下代码,s1和s2的值能够得到,但是s3中的p1和p2的值不知如何解析到:
var filterInfoList map[string]interface{}
strFilter := `{"s1":"ddd","s2":"ppp","s3":[{"p1":"ok1"},{"p2":"ok2"}]}`
err := json.Unmarshal([]byte(strFilter), &filterInfoList)
if err != nil {
fmt.Println("error in translating,", err.Error())
return
}
fmt.Println(filterInfoList["s1"])
fmt.Println(filterInfoList["s2"])
fmt.Println(filterInfoList["s3"])
两种方式,一种按照你写的,按照map一层层解析,另一种是抽出数据格式,直接解析,下面代码中都有了。
```golang
package main
import (
"fmt"
"encoding/json"
)
type s3_sub struct{
P1 string `json:"p1"`
P2 string `json:"p2"`
}
type ss struct{
S1 string `json:"s1"`
S2 string `json:"s2"`
S3 []*s3_sub `json:"s3"`
}
func main() {
var filterInfoList map[string]interface{}
strFilter :=`{"s1":"ddd","s2":"ppp","s3":[{"p1":"ok1"},{"p2":"ok2"}]}`
err := json.Unmarshal([]byte(strFilter), &filterInfoList)
if err != nil {
fmt.Println("error in translating,", err.Error())
return
}
fmt.Println(filterInfoList["s1"])
fmt.Println(filterInfoList["s2"])
fmt.Println(filterInfoList["s3"])
s3slice := filterInfoList["s3"].([]interface{})
s3slice_idx_0 := s3slice[0].(map[string] interface{})
fmt.Println(s3slice_idx_0["p1"])
s3slice_idx_1 := s3slice[1].(map[string] interface{})
fmt.Println(s3slice_idx_1["p2"])
var ssins ss
err = json.Unmarshal([]byte(strFilter), &ssins)
fmt.Println(ssins.S3[0].P1)
fmt.Println(ssins.S3[1].P2)
}
```
#1