2014-01-05 5 views
4

Go 및 GoRestful을 사용하여 Google App Engine Datastore에 저장된 일부 엔티티에 대해 RESTFUL 프런트 엔드를 프로그래밍합니다.이동 Lang 전체 구조체에 대한 태그 설정

데이터는 JSON/XML로 변환되고 각 형식의 스타일을 제어하는 ​​태그를 사용하여 사용자에게 표시됩니다. 올바른 스타일을 사용하여 출력되도록 구조체 자체의 이름에 태그를 적용하는 방법은 무엇입니까?

내 구조체의 예는 다음과 같습니다

type Shallow struct { 
    Key   string `datastore:"-" json:"key" xml:"key"` 
    LastModified time.Time `json:"last_modified" xml:"last-modified"` 
    Version  int  `json:"version" xml:"version"` 
    Status  int  `json:"status" xml:"status"` 
    Link   Link  `datastore:"-" json:"link" xml:"link"` 
    Name   string `json:"name" xml:"name"` 
} 

type ProbabilityEntry struct { 
    ItemId  int64 `datastore:"ItemId" json:"item_id" xml:"item-id"` 
    Probability float32 `datastore:"Probability" json:"probability" xml:"probability"` 
    Quantity int16 `datastore:"Quantity" json:"quantity" xml:"quantity"` 
} 

type LootTable struct { 
    Shallow 
    AllowPreload bool    `json:"allow_preload" xml:"allow-preload"` 
    Probabilities []ProbabilityEntry `json:"probabilities" xml:"probabilities"` 
} 

LootTable의 구조체는 'loot_table'또는 '전리품 테이블'보다는 'LootTable'로 자신을 표현해야 JSON/XML에 방출

.

+1

원하지 않는 출력을 생성하는 LootTable을 마샬링하는 데 사용하는 코드를 표시 할 수 있습니까? 'json.Marshal (myLootTable) '에 대한 간단한 호출은 json dict 이외의 것으로 "자신을 표현"하지 않습니다. –

+0

코드는 내 응용 프로그램에 불투명하며 GoRestful 또는 다른 내장 라이브러리에 의해 제공됩니다. 아래의 Dommage의 대답은 어떤 경우에도 내 요구를 훌륭하게 처리 할 것입니다. –

답변

4

간단한 답 :

는 외부 구조체에 랩 :

type Payload struct { 
    Loot LootTable `json:"loot_table"` 
} 

긴 대답 :

json으로의 수신기가 그들이 얻고있는 것을 알고 있다면 다음이 정말 필요하지 않습니다 . 그러나 JSON API를 빌드 할 때 응답 유형을 포함 할 수있는 요청과 관련된 추가 세부 정보가 들어있는 Response 구조체를 자주 작성합니다. 다음 예는 다음과 같습니다 API는 일반적으로 기대하는지 알아 호출하지만 함께,

type JSONResponse struct { 
    Obj interface{} `json:"obj"` // Marshall'ed JSON (not wrapped) 
    Type string  `json:"type"` // "loot_table" for example 
    Ok  bool  `json:"ok"`  // Does this response require error handling? 
    Errors []string `json:"errors"` // Any errors, you could leave out Ok and just check this 
} 

다시 응답이 방법이 도움이 될 수 있습니다 유형의 숫자 ​​중 하나가 될 수 있다면.

관련 문제