我想将从SQL查询返回的值分配给多维结构。我想将这个多维结构作为JSON输出到Web前端。
编辑:SQL查询很简单,'SELECT * FROM policy'。它会返回许多键/值,但出于示例的目的,我只使用'policy_id','class_id'和'name'字段。
我的结构
type table struct {
Policy string `json:"policy"`
P []Parameters `json:"parameters"`
}
type Parameters struct {
Policy_id string `json:"policy_id"`
Class_id string `json:"class_id"`
Name string `json:"name"`
.... <removed many more entries of the same type>
}
然后我使用rows.Next()//循环访问SQL输出//对问题不重要。
如果我这样做:
p := Parameters{}
然后:
err = rows.Scan(&p.Policy_id, &p.Class_id, &p.Name)
p填充了我期望的键/值对。
编辑:我添加了p.Name,因为我想使用从查询字符串返回的Name作为表结构的唯一键。之前并不清楚。
但是,我想将数据放入更高级别的struct'table'。我最终希望输出在JSON中看起来像这样:
{policy:“policyName1”,P:[{policy_id:'1',class_id:'01“},{policy_id:'2',class_id:'02'}等}}
我尝试过这样的事情:
t := table {
Policy: p.Name,
P: p,
}
以及其他一些组合,但此时我只是在猜测。有人能指出我正确的方向吗?
答案 0 :(得分:1)
可能是这样的:
// a map with policy name as key
ts := map[string]tables
defer rows.Close()
for rows.Next() {
p := Parameters{}
if err := rows.Scan(&p.Policy_id, &p.Class_id, &p.Name); err != nil {
log.Fatal(err)
}
// initialize the table, if not exists
if _, ok := ts[p.Name]; !ok {
ts[p.Name] = table{
Policy: p.Name,
P: make([]Parameters),
}
}
// append the parameters to the policy
ts[p.Name].P = append(ts[p.Name].P, p)
}