2017-02-22 69 views
0

我有一個使用Beego框架在Golang中構建的API,並且我有一個具有多個連接的查詢,然後返回一個JSON結果。Beego/Golang - 查詢結構值

我希望有一種方法可以將每行轉換爲具有更好的鍵名,IE而不是「Stage__Description」只是「Stage」等的結構體......因此,我用鍵構建了一個ResultMap結構體我想要的名稱,我應該創建一個地圖嗎?

查詢:

type ResultMap struct { 
    Id  int 
    DateAdded time.Time 
    FirstName string 
    LastName string 
    Username string 
    Stage  string 
    station string 
    status string 
} 

//var maps []ResultMap 
var maps []orm.Params 
num, err := o.QueryTable("test_result_detail"). 
    Filter("Result__Serial", "121994-0001"). 
    Values(&maps, "id", "date_added", "stage__description", "station__station", "status__status", "operator__username", "operator__first_name", "operator__last_name") 

JSON結果

[ 
    { 
    "DateAdded": "2016-10-20T00:00:00-05:00", 
    "Id": 8306105, 
    "Operator__FirstName": "Jose", 
    "Operator__LastName": "Mendez", 
    "Operator__Username": "3362", 
    "Stage__Description": "VR1 Test", 
    "Station__Station": "TS0653", 
    "Status__Status": "PASS" 
    }, 
    { 
    "DateAdded": "2016-10-20T00:00:00-05:00", 
    "Id": 8306465, 
    "Operator__FirstName": "Jose", 
    "Operator__LastName": "Mendez", 
    "Operator__Username": "3362", 
    "Stage__Description": "QA Lab X-Ray Inspection", 
    "Station__Station": "LABEQP-0004", 
    "Status__Status": "PASS" 
    }, 
    { 
    "DateAdded": "2016-10-28T00:00:00-05:00", 
    "Id": 8547267, 
    "Operator__FirstName": "Jose", 
    "Operator__LastName": "Mendez", 
    "Operator__Username": "3362", 
    "Stage__Description": "Capture Customer SN", 
    "Station__Station": "N/A", 
    "Status__Status": "PASS" 
    }, 
    { 
    "DateAdded": "2016-10-28T00:00:00-05:00", 
    "Id": 8547851, 
    "Operator__FirstName": "Jose", 
    "Operator__LastName": "Mendez", 
    "Operator__Username": "3362", 
    "Stage__Description": "Final Test", 
    "Station__Station": "TS0653", 
    "Status__Status": "PASS" 
    }, 
    { 
    "DateAdded": "2017-02-14T00:00:00-06:00", 
    "Id": 10993864, 
    "Operator__FirstName": "Jose", 
    "Operator__LastName": "Mendez", 
    "Operator__Username": "3362", 
    "Stage__Description": "QA Mechanical Final Inspection", 
    "Station__Station": "VISUAL INSPECTION", 
    "Status__Status": "PASS" 
    } 
] 

回答

1

你想在你的結構使用JSON註釋,然後使用json.Unmarshal把數據轉化爲你的結構。

下面是一個例子:

package main 

import (
    "encoding/json" 
    "fmt" 
) 

func main() { 
    // The struct you want to store the data in 
    // Note the json tags that show which json field corresponds to which struct field 
    type Data struct { 
     FirstName string `json:"Operator__FirstName"` 
     LastName string `json:"Operator__LastName"` 
    } 
    // Create a slice of these structs since our json is an array of results 
    var structData []Data 

    // The json you want to dump into the structs 
    jsonData := []byte(`[{"Operator__FirstName": "Bob", "Operator__LastName": "Smith"},{"Operator__FirstName": "John", "Operator__LastName": "Adams"}]`) 

    _ = json.Unmarshal(jsonData, &structData) 

    fmt.Printf("%+v", structData) 
} 

這裏,它是在去遊樂場:https://play.golang.org/p/Z2P7oUVT9i

+0

你能告訴我怎麼會遍歷我的地圖有多個結果上述目的? – xXPhenom22Xx

+0

我更新了上面的例子來處理具有多個結果的json數組。基本上你只需要創建一個你的結構的一部分,然後反編組。 – MahlerFive