2016-10-06 61 views
0

我想將從SQL查詢返回的值分配給多維結構。我想將這個多維結構作爲JSON輸出到Web前端。Golang將值從sql查詢分配給多維結構

編輯:SQL查詢很簡單, 'SELECT * FROM政策'。它返回許多鍵/值,但爲了示例的目的,我只使用'policy_id','class_id'和'name'字段。

我的Structs

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> 
    } 

我再通過SQL輸出迴路使用rows.Next()//對於這個問題並不重要。

如果我做的:

p := Parameters{} 

則:

err = rows.Scan(&p.Policy_id, &p.Class_id, &p.Name) 

p被填充了鍵/值對我的期望。

編輯:我添加p.Name,因爲我想使用的名稱從查詢字符串爲表結構的唯一鍵返回。這在之前並不清楚。

不過,我希望將數據進入更高的層次結構「表」。我最終希望輸出在JSON中看起來像這樣:

{policy:「policyName1」,P:[{policy_id:'1',class_id:'01「},{policy_id:'2',class_id: 「02」}等]}

我已經試過這樣的事情:

t := table { 
Policy: p.Name, 
P: p, 
} 

和其他幾個組合,但在這一點上我只是猜測有人點我在正確的。方向?

+0

我不知道我理解正確。參數表是否包含策略名稱?表格中是否有多個政策? –

+0

如果可能,請顯示錶格模式。 –

+0

是的,這沒有意義。我將編輯該問題,因爲我需要將「名稱」值放在那裏。 – Heath

回答

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) 
} 
+0

這是我還沒有嘗試的方法。謝謝。我會給它一個正確的答案。 – Heath