Я хочу разобрать следующий JSON вывод:Разбирает в JSON структуру?
{
"total":5689,
"result":{
"6581":{
"percent":37.79,
"count":2150
},
"6591":{
"percent":35.31,
"count":2009
},
"6601":{
"percent":26.89,
"count":1530
}
}
}
Я прочитал, что JSON может быть разобрано в структуры, если формат известен:
package main
import (
"encoding/json"
"fmt"
"os"
)
type VoteResult struct {
Total int `json:"total"`
Result struct {
Efid1 struct {
Percent float64 `json:"percent"`
Count int `json:"count"`
}
Efid2 struct {
Percent float64 `json:"percent"`
Count int `json:"count"`
}
Efid3 struct {
Percent float64 `json:"percent"`
Count int `json:"count"`
}
}
}
func main() {
b := []byte(`{"total":5689,"result":{"6581":{"percent":37.79,"count":2150}
,"6591":{"percent":35.31,"count":2009},"6601":{"percent":26.89,"count":1530}}}`)
var v VoteResult
err := json.Unmarshal(b, &v)
if err != nil {
fmt.Fprintf(os.Stderr, "%v\n", err)
os.Exit(1)
}
fmt.Println(v)
}
Это вывода, но что-то не так, поскольку вложенные структуры не заполнены данными:
{5689 {{0 0} {0 0} {0 0}}}
Что я делаю неправильно?
У него просто отсутствует бирка. Изменение его типа данных на что-то динамическое не является хорошим решением этой проблемы. – evanmcdonnal
@evanmcdonnal Я не уверен, что заставляет вас думать об этом. Тег JSON по умолчанию для 'Result' - это' result'. Добавление тега не должно (и не делает, когда я просто его пробовал) имеет значение. – smarx
Да, вы правы, это прекрасно работает, и мой код был неправильным, не читал сообщение достаточно близко. Результат должен быть словарем, потому что у объектов есть ключи. Он мог бы сделать что-то вроде того, что у меня есть, но на самом деле не имеет смысла imo (для трех внутренних структур также нужны теги, и я уверен, что их имена меняются от одного ответа к другому). – evanmcdonnal