2013-06-16 2 views
2

Итак, у меня есть JSON (любезно предоставлен API PetFinder), у которого есть «домашнее животное» JSON. Я хочу отменить его, используя пакет «encoding/json», срез домашних структур. Как бы выглядела такая структура? Я не могу найти примеры того, как функция unmarshall обрабатывает массивы JSON.Перейти к структуре для unmarshalling массива JSON

Вот что я планировал сделать, как только у меня был правильный-структуру:

pfetch := new(PetsFetcher) // where PetsFetcher is the struct im asking for 
err := json.Unmarshal(body, &pfetch) 

И вот JSON, что в организме человека (в виде кусочка ASCii байт):

{ 
    "petfinder": { 
    "lastOffset": { 
     "$t": 5 
    }, 
    "pets": { 
     "pet": [ 
     { 
      "options": { 
      "option": [ 
       { 
       "$t": "altered" 
       }, 
       { 
       "$t": "hasShots" 
       }, 
       { 
       "$t": "housebroken" 
       } 
      ] 
      }, 
      "breeds": { 
      "breed": { 
       "$t": "Dachshund" 
      } 
      } 
    }, 
     { 
      "options": { 
      "option": { 
       "$t": "hasShots" 
      } 
      }, 
      "breeds": { 
      "breed": { 
       "$t": "American Staffordshire Terrier" 
      } 
      }, 
      "shelterPetId": { 
      "$t": "13-0164" 
      }, 
      "status": { 
      "$t": "A" 
      }, 
      "name": { 
      "$t": "HAUS" 
      } 
     } 
     ] 
    } 
    } 
} 

Заранее спасибо.

+0

Публикуйте структуру (ы) вашего любимца. – elithrar

ответ

2

Я действительно не знаю, что эти атрибуты делают в вашем JSON, поэтому давайте ответим на ваш вопрос простым примером. Для того, чтобы распаковать этот JSON:

{ 
    "name": "something", 
    "options": [ 
    { 
     "key": "a", 
     "value": "b" 
    }, 
    { 
     "key": "c", 
     "value": "d" 
    }, 
    { 
     "key": "e", 
     "value": "f" 
    }, 
    ] 
} 

Вам нужен этот Data тип в Go:

type Option struct { 
    Key string 
    Value string 
} 

type Data struct { 
    Name string 
    Options []Option 
} 
+0

Спасибо, это то, что я искал. Чтобы сделать жизнь еще проще, я нашел эту удобную библиотеку, которую кто-то сделал https://github.com/bitly/go-simplejson. – turnerd18

1

Вы можете распаковать в яваскрипта массив в срезе. Правила marhsal/unmarshalling описаны в Marshal в json package.

Чтобы развязать ключи, которые выглядят как «$ t», вам нужно будет аннотировать структуру, в которую он будет распаковываться.

Например:

type Option struct { 
    Property string `json:"$t,omitempty"` 
} 

Это может быть, что $ т, которые появляются являются ошибкой, и должны быть ключи в словаре.

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