2016-03-13 4 views
0

я использую интерфейс json.Marshal принять map[string]interface{} и преобразовать его в []byte (это массив байт?)Создать-структуру из массива байтов

data, _ := json.Marshal(value) 
log.Printf("%s\n", data) 

я получаю этот выход

{"email_address":"[email protected]","street_address":"123 Anywhere Anytown","name":"joe","output":"Hello World","status":1} 

Базовые байты относятся к структуре нижеследующей декларации

type Person struct { 
    Name   string `json:"name"` 
    StreetAddress string `json:"street_address"` 
    Output   string `json:"output"` 
    Status   float64 `json:"status"` 
    EmailAddress string `json:"email_address",omitempty"` 
} 

Я бы хотел ike принять data и сгенерировать переменную типа Person struct

Как это сделать?

ответ

2

json.Unmarshal Вы используете:

package main 

import (
    "encoding/json" 
    "fmt" 
) 

type Person struct { 
    Name   string `json:"name"` 
    StreetAddress string `json:"street_address"` 
    Output  string `json:"output"` 
    Status  float64 `json:"status"` 
    EmailAddress string `json:"email_address",omitempty"` 
} 

func main() { 
    data := []byte(`{"email_address":"[email protected]","street_address":"123 Anywhere Anytown","name":"joe","output":"Hello World","status":1}`) 
    var p Person 
    if err := json.Unmarshal(data, &p); err != nil { 
     panic(err) 
    } 
    fmt.Printf("%#v\n", p) 
} 

Выход:

main.Person{Name:"joe", StreetAddress:"123 Anywhere Anytown", Output:"Hello World", Status:1, EmailAddress:"[email protected]"} 
+0

Awesome! Это работает! Хотя у меня есть два следующих вопроса: это кажется немного круговым - мы сначала маршалируем, а затем беспоснаряем - это нормально? Есть ли способ напрямую получить структуру Person из интерфейса map [string] {}? , Мой второй вопрос: давайте скажем, что поле email_address не было в данных (так как это поле с неопределенностью). Нужно ли мне что-то делать с призывом Unmarshal? Или выше все еще будет работать? – wrecktangle

+0

@nthacker, это несколько круговое движение, но для всех, что я знаю, нет простого способа преобразования карты непосредственно в структуру. Реальный вопрос, однако, заключается в том, где вы получаете первую карту? Почему вещь, которая производит это, не просто дает вам структуру? Возможно, вы могли бы реорганизовать свой код, чтобы вам вообще не нужна карта. Что касается вашего второго вопроса ... есть ли что-то, что мешает вам попробовать себя? – Aedolon

+0

Вы правы по обоим пунктам! Спасибо, я посмотрю на обоих! – wrecktangle

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