2017-02-22 56 views
0

У меня есть API, построенный в Голанге с использованием рамки Beego, и у меня есть один запрос с несколькими объединениями, а затем возвращает результат JSON.Beego/Golang - Query Values ​​to Struct

Я надеялся, что у меня есть способ бросить каждую строку в структуру, которая имеет более приятные ключевые имена, 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) 
} 

А вот в Go Playground: https://play.golang.org/p/Z2P7oUVT9i

+0

Можете ли вы показать, как я бы перебирать мои карты объекта выше с несколькими результатами? – xXPhenom22Xx

+0

Я обновил приведенный выше пример, чтобы обработать массив json с несколькими результатами. В основном вам просто нужно создать фрагмент ваших структур и вместо этого включить в него. – MahlerFive