Jak zdefiniować wiele tagów nazw w strukturze


137

Muszę pobrać element z bazy danych mongo, więc zdefiniowałem taką strukturę

type Page struct {
    PageId string                 `bson:"pageId"`
    Meta   map[string]interface{} `bson:"meta"`
}

Teraz muszę również zakodować go do JSON, ale koduje pola jako wielkie litery (otrzymuję PageId zamiast pageId), więc muszę również zdefiniować tagi pól dla JSON. Próbowałem czegoś takiego, ale nie zadziałało:

type Page struct {
    PageId string                 `bson:"pageId",json:"pageId"`
    Meta   map[string]interface{} `bson:"meta",json:"pageId"`
}

Jak więc można to zrobić, zdefiniować wiele tagów nazw w strukturze?

Odpowiedzi:


238

W dokumentacji reflectpakietu jest napisane :

Zgodnie z konwencją, ciągi znaczników są połączeniem opcjonalnie oddzielonych spacjami par klucz: „wartość”. Każdy klucz to niepusty ciąg składający się ze znaków niebędących kontrolkami innych niż spacja (U + 0020 ''), cudzysłów (U + 0022 '"') i dwukropek (U + 003A ':'). Każda wartość jest cytowana używając znaków U + 0022 '"' i składni literału Go.

To, co musisz zrobić, to użyć spacji zamiast przecinka jako separatora ciągu znaczników.

type Page struct {
    PageId string                 `bson:"pageId" json:"pageId"`
    Meta   map[string]interface{} `bson:"meta" json:"meta"`
}

5
Upewnij się też, że jest oddzielony tylko spacją, a nie tabulatorem. por. stackoverflow.com/questions/20215510/…
GreenRaccoon

68

Dzięki za zaakceptowaną odpowiedź.

Poniżej jest tylko dla leniwych ludzi takich jak ja.

BŁĘDNY

type Page struct {
    PageId string                 `bson:"pageId",json:"pageId"`
    Meta   map[string]interface{} `bson:"meta",json:"pageId"`
}

POPRAWNY

type Page struct {
    PageId string                 `bson:"pageId" json:"pageId"`
    Meta   map[string]interface{} `bson:"meta" json:"pageId"`
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.