2017-02-01 16 views
-1

У меня есть RESTful сервис, который возвращает ответ аналогичен показано ниже:Json тип модели распаковать в golang

"Basket" : { 
    "Count": 1, 
    "Fruits": {[ 
    { 
     "Name":"Mango", 
     "Season":"Summer" 
    }, 
    { 
     "Name":"Fig", 
     "Season":"Winter"} 
    ]} 
} 

Я пытаюсь создать Go языки модель для распаковать содержимое. Ниже приводится код, который я пробовал:

type Response struct { 
    Count int 
    Fruits []Fruit 
} 

type Fruit struct { 
    Name string 
    Season string 
} 

Но когда я маршал объект Response в моем тестовом коде я не вижу подобный JSON. всегда появляется (https://play.golang.org/p/EGKqfbwFvW) выстроил данные как:

{ 
    "Count":100, 
    "Fruits":[ 
    {"Name":"Mango","Season":"Summer"}, 
    {"Name":"Fig","Season":"Winter"} 
    ] 
} 

Обратите внимание на фрукты, появляющиеся в виде массива [] и не {[]} в оригинальном формате JSON. Как я могу моделировать структуры в golang для этого ответа?

+5

Это не является допустимым JSON. Фрукты должны быть либо массивом, либо парой name: value. –

ответ

1

Ваша модель является полностью правильным и допустимым, но объект JSON не является. "Fruits" не имеет имени, если оно должно быть ключом или оно должно быть обернуто в [] не {}.

JSON OBJ должен быть отформатирован следующим образом:

{ 
    "Basket" : { 
    "Count": 1, 
    "Fruits": [ 
     { 
     "Name":"Mango", 
     "Season":"Summer" 
     }, 
     { 
     "Name":"Fig", 
     "Season":"Winter" 
     } 
    ] 
    } 
} 

И на самом деле недействителен JSON не должен работать https://play.golang.org/p/yoW7t4NfI7

+0

Вы находитесь на месте, JSON, который я потребляю, поступает от третьего лица и недействителен. Я переключаюсь на XML, и моя структура работает отлично (вот почему мне нравится Go, переход - всего лишь 2 изменения строки). Я также проверял с помощью json.RawMessage. У Json не должно быть «[» после «{». – sukkad

1

Я бы сделал 'Baskets' структуру внутри 'Response', создав структуру 'BasketsData' и дадим ей все метки.

type Fruit struct { 
    Name string `json:"Name"` 
    Season string `json:"Season"` 
} 

type BasketData struct { 
    Count int  `json:"Count"` 
    Fruits []Fruit `json:"Fruits"` 
} 

type Response struct { 
    Basket BasketData `json:"Basket"` 
} 

Таким образом вы получите ответ JSON верхнего уровня, когда вы его разберетесь.

fruitmania := []Fruit{{Name: "Mango", Season: "Summer"}, 
         {Name: "Fig", Season: "Winter"}} 
basket := Response{BasketData{Count: 100, Fruits: fruitmania}} 

b, _ := json.Marshal(basket) 
fmt.Println(string(b)) 

CheckIt-CheckIt из: https://play.golang.org/p/TuUwBLs_Ql

+0

Это не решает проблему появления фруктов в виде массива ** [] **, а не ** {[]} **. Результат должен иметь «Фрукты»: {[{«Имя»: «Манго», «Сезон»: «Лето»}, {«Имя»: «Рис», «Сезон»: «Зима»}]} – sukkad

+0

@sukkad that's недействителен JSON –

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

  • Нет связанных вопросов^_^