如何使用golang打印json文档中"org"下current字段中存储的所有元素?
How to print all the elements stored in the field current under "org" in json document in using golang?
更新后的json如下:
{
"phone":[
{"home":"58878767"},
{"mobile":"32453543"}
],
"org": [
{
"current": {
"org_dept": "Hr",
"org_eptime": "1516354574432",
"org_name": "Uejsjak",
"org_title": "Hakosklaks"
}
},
{
"current": {
"org_dept": "Accounts",
"org_eptime": "1516354561184",
"org_name": "Abcd",
"org_title": "Hakahkshsjs"
},
{
"past": {
"org_dept": "Backend",
"org_eptime": "15163545",
"org_name": "Ab",
"org_title": "Hakah"
}
}
]
}
我正在使用以下代码打印键和值:
personMap := make(map[string][]map[string]string)
json.Unmarshal([]byte(ii), &personMap)
for key, value := range personMap {
fmt.Println("index : ", key, " value : ", value){
}
我得到的输出是:
index: org value: [map["current":""],map["current":""]
如何打印字段 "current" 下字段的每个值?????
现在我正在这样做:
personMap := make(map[string][]struct{Current map[string]string})
json.Unmarshal([]byte(ii), &personMap)
for key, value := range personMap {
fmt.Println("index : ", key, " value : ", value)
}
我得到的输出是:
index : org value : [{map[org_dept:Hr org_eptime:1516354574432 org_name:Uejsjak org_title:Hakosklaks]} {map[org_dept:Accounts org_eptime:1516354561184 org_name:Abcd org_title:Hakahkshsjs]}]
index : phone value : [{map[]} {map[]}]
phone
和 org
的内容是完全不同的数据结构,您无法像示例中那样将两者完全反序列化为同质格式。最好的选择是至少部分反序列化为 struct
:
type data struct {
Phone []map[string]string
Org []map[string]map[string]string
}
这至少会反序列化所有的数据,但还是有点乱;一片地图的地图不是一个很好的数据结构。从问题中不清楚,但如果任何字段是固定的,您可能还想将这些字段编码为类型,例如:
type data struct {
Phone []map[string]string
Org []struct{
Current map[string]string
}
}
然后您可以反序列化为这种类型并更轻松地使用它:
var person data
json.Unmarshal([]byte(ii), &person)
fmt.Printf("%v", person.Phone)
fmt.Printf("%v", person.Org[0].Current)
此处为工作操场示例:https://play.golang.org/p/5W-7RzPimZj
请注意,我必须更正 JSON 中的一个错误,由于 "org"
.
之前缺少逗号,它无效
更新后的json如下:
{
"phone":[
{"home":"58878767"},
{"mobile":"32453543"}
],
"org": [
{
"current": {
"org_dept": "Hr",
"org_eptime": "1516354574432",
"org_name": "Uejsjak",
"org_title": "Hakosklaks"
}
},
{
"current": {
"org_dept": "Accounts",
"org_eptime": "1516354561184",
"org_name": "Abcd",
"org_title": "Hakahkshsjs"
},
{
"past": {
"org_dept": "Backend",
"org_eptime": "15163545",
"org_name": "Ab",
"org_title": "Hakah"
}
}
]
}
我正在使用以下代码打印键和值:
personMap := make(map[string][]map[string]string)
json.Unmarshal([]byte(ii), &personMap)
for key, value := range personMap {
fmt.Println("index : ", key, " value : ", value){
}
我得到的输出是:
index: org value: [map["current":""],map["current":""]
如何打印字段 "current" 下字段的每个值?????
现在我正在这样做:
personMap := make(map[string][]struct{Current map[string]string})
json.Unmarshal([]byte(ii), &personMap)
for key, value := range personMap {
fmt.Println("index : ", key, " value : ", value)
}
我得到的输出是:
index : org value : [{map[org_dept:Hr org_eptime:1516354574432 org_name:Uejsjak org_title:Hakosklaks]} {map[org_dept:Accounts org_eptime:1516354561184 org_name:Abcd org_title:Hakahkshsjs]}]
index : phone value : [{map[]} {map[]}]
phone
和 org
的内容是完全不同的数据结构,您无法像示例中那样将两者完全反序列化为同质格式。最好的选择是至少部分反序列化为 struct
:
type data struct {
Phone []map[string]string
Org []map[string]map[string]string
}
这至少会反序列化所有的数据,但还是有点乱;一片地图的地图不是一个很好的数据结构。从问题中不清楚,但如果任何字段是固定的,您可能还想将这些字段编码为类型,例如:
type data struct {
Phone []map[string]string
Org []struct{
Current map[string]string
}
}
然后您可以反序列化为这种类型并更轻松地使用它:
var person data
json.Unmarshal([]byte(ii), &person)
fmt.Printf("%v", person.Phone)
fmt.Printf("%v", person.Org[0].Current)
此处为工作操场示例:https://play.golang.org/p/5W-7RzPimZj
请注意,我必须更正 JSON 中的一个错误,由于 "org"
.