2017-02-22 20 views
0

私はBeegoフレームワークを使用してGolangでAPIを構築していますが、複数の結合を持つ単一のクエリがあり、JSON結果を返します。Beego/Golang - 構造体へのクエリ値

私は、 "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.Unmarshalを使用し、その後、あなたの構造体にJSONのアノテーションを使用します。

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

関連する問題