2015-07-10 3 views
0

Я пишу обертку API, где вызов API возвращает ответ JSON некоторых данных, позволяет сказать:Golang JSON распаковать несколько вызовов

{ 
    group_id: 123, 
    group_name: "cool kids", 
} 

для URL example.com/api/groups

Вы можете затем добавить fields=members к URL (так что-то вроде: example.com/api/groups?group_id=123&fields=members), чтобы затем получить:

{ 
    members: [...some data..] 
} 

Обратите внимание, как другие поля теперь не хватает ...

Ну я пытаюсь использовать один struct, который будет выглядеть так:

type Club struct { 
    GroupId int `json:"group_id"` 
    GroupName string `json:"group_name"` 
    Members []struct {...} `json:"members" 
} 

Это то, что выглядеть Структуры:

type Committee struct { 
    GroupId  string `json:"group_id"` 
    GroupName string `json:"group_name"` 
    Members  []struct { 
     Person  Person `json:"person"` 
     Rank  float64 `json:"rank"` 
     Side  string `json:"side"` 
     Title  string `json:"title"` 
    } `json:"members"` 
} 

type Person struct { 
    id  string `json:"id"` 
    name string `json:"name"` 
    age int `json:"age"` 
} 

func getGroup() Club {...} 
func (c *Club) GetMembers() {...} 

Так что я сделать первый звонок, который unmarshals с использованием getGroup, поэтому структура имеет GroupId и GroupName просто отлично и Members пуст, потому что вызов ничего не возвращает.

Я затем вызвать club.GetMembers() для заполнения Members поля так, что вся структура будет заселена, но это не кажется, извлекая его в структуры, потому что в конце Members еще пуста, и данные для GroupId и GroupName является все еще там.

Я точно знаю, что звонок возвращает то, что я ожидаю, поэтому я считаю, что это Unmarshal, который не работает, так как бы я пошел по этому поводу? Это не входит в функциональность Unmarshal?

EDIT Я просто нажал точный код на github, все еще не уверен.

Это репо: https://github.com/PeteJodo/gosun

Это суть используя вышеупомянутую репо: https://gist.github.com/PeteJodo/d5335b9f66304148483b

Основные файлы озабоченность:

service.go

congress.go

committees.go

legislators.go

+2

Дополнительная информация необходима, чтобы помочь: Пожалуйста, покажите структуру членов, код, который вызывает Unmarshal, и сообщите нам о каких-либо ошибках, возвращаемых с помощью unmarshal. –

+0

какая версия go? – OneOfOne

+0

http://play.golang.org/p/uuO8iGh2Uo <он отлично работает, вы уверены, что используете указатель? – OneOfOne

ответ

0

Alright так что мой вопрос не имеет ничего общего с Unmarshal на говорят. Случалось, что ответ API возвращается:

{ 
    results: [{ 
      group_id: 123, 
      group_name: "cool kids" 
     }, ...], 
    ... 
} 

... каждый результат, являющийся отдельной группой.Моя проблема заключалась в том, что каждая группа была собственной структурой, и у меня был метод для структуры Group, который заставил бы следующий вызов развернуть свое поле Members, и я использовал структуру Group как назначение для Unmarshal вместо чего-то вроде Results, которое правильно структурированы для ответа API, а THEN выведите правильное значение Group и его поле Members

Смежные вопросы