2015-02-09 13 views
5

ja chce utworzyć JSON o GatewayInfo gdzie typ są zdefiniowane następująco:Golang i JSON z tablicy struktury

type SpanInfo struct { 
    imsi string 
    network string 
    network_status string 
    signal_quality int 
    slot int 
    state string 
} 

type GatewayInfo []SpanInfo 

Informacje brama jest utworzone z:

var gatewayInfo = make(GatewayInfo, nb_spans) 

Aby stworzyć JSON, używam json.Marshal funkcję:

gatewayInfo := getGatewayInfo(spans) 
log.Printf("Polling content: %s\n", gatewayInfo) 

jsonInfo, _ := json.Marshal(gatewayInfo) 
log.Printf("jsonInfo: %s\n", jsonInfo) 

Unfortuna dłuż- szej perspektywie wynik nie jest to, czego się spodziewałem:

2015/02/09 13:48:26 Polling content: [{652020105829193 20801 Registered (Roaming) %!s(int=17) %!s(int=2) } {652020105829194 20801 Registered (Roaming) %!s(int=16) %!s(int=3) } {652020105829192 20801 Registered (Roaming) %!s(int=19) %!s(int=1) } {652020105829197 20801 Registered (Roaming) %!s(int=19) %!s(int=4) }] 
2015/02/09 13:48:26 jsonInfo: [{},{},{},{}] 

Jak widzimy, instancja GatewayInfo ma SpanInfo, ale w JSON mam pusty SpanInfo.

+0

możliwy duplikat [Kim struktury nie są etapowy w json] (http://stackoverflow.com/questions/15452004/my-structures-are-not-marshalling-into-json) –

Odpowiedz

9

polach struct musi być eksportowane (pole jest eksportowany, jeśli zaczyna się wielką literą) lub nie będą one zakodowane:

wartości struct zakodować jako obiekty JSON. Każdy eksportowane pola struct staje się członkiem obiektu

aby uzyskać reprezentację JSON zgodnie z oczekiwaniami prawdopodobnie zmienić kod do tego:

type SpanInfo struct { 
    IMSI string `json:"imsi"` 
    Network string `json:"network"` 
    NetworkStatus string `json:"network_status"` 
    SignalQuality int `json:"signal_quality"` 
    Slot int `json:slot"` 
    State string `json:"state"` 
} 

type GatewayInfo []SpanInfo 
+0

Podczas gdy ta odpowiedź działa, Arjan powinien prawdopodobnie zauważyć, że nazwy pól powinny zaczynać się od wielkich liter. (patrz odpowiedź icza poniżej), –

+0

@ VěrošK.Dodano wyjaśnienie – Arjan

+0

zajęło mi godzinę, aby znaleźć to rozwiązanie. Dzięki –

2

Pakiet json może serializować wyeksportowane pola struktury. Zmienić struct zacząć wszystkie pola z wielkiej litery, więc mogą być zawarte w danych wyjściowych:

type SpanInfo struct { 
    Imsi string 
    Network string 
    Network_status string 
    Signal_quality int 
    Slot int 
    State string 
} 

Czytaj dokumentację json.Marshal() po szczegóły i więcej informacji.

Powiązane problemy