2015-12-30 2 views
0

структурами У меня есть следующий код:JSON маршализацию не работает, как ожидалось с

package main 

import "encoding/json" 
import "fmt" 

type SuperNum struct { 
    num string 
} 

func main() { 
    byt := []byte(`{"num":"6.13"}`) 

    var dat SuperNum 

    if err := json.Unmarshal(byt, &dat); err != nil { 
     panic(err) 
    } 
    fmt.Printf("%+v", dat) // I expect this to have a `num` attribute 
} 

Выход:

{num:} 
Program exited. 

Вы можете запустить этот код in the golang playground.

Потому что я устанавливаю num собственности в структурах и в формате JSON, и они обе строки, я бы ожидал, что dat структуры иметь num свойства, с 'hello', но это не так.

Что я делаю неправильно? Что в моей ментальной модели того, как это должно работать, неверно?

EDIT

Я попытался добавить json подпись на структуры, но это не имеет никакого значения (понятия не имею, что это на самом деле делает).

type SuperNum struct { 
    num string `json:"num"` 
} 

ответ

4

num по договоренности не экспортируется, как в нижнем регистре. Измените его на Num, и вы сможете проверить результат.

type SuperNum struct { 
    Num string 
}                     
2

Просто измените num на Num. Строчные свойства структур не видны.

Go playground

1

Когда unmarhalling JSON структуры, свойство, которые вы отображающие на должно быть публичным (помните, что в Go, государственная и частная видимость структуры и модуль элементов обозначаются имя члена при верхнем . или ниже верблюд случае

Итак, в первую очередь, ваша структура должна быть определена следующим образом:

type SuperNum struct { 
    Num string // <- note the capital "N" 
} 

С помощью этой структуры, то маршаллер JSON будет ожидайте, что свойство JSON будет также называться Num. Для того, чтобы задать другое имя свойства (например, в вашем примере в нижнем регистре num), используйте json аннотацию для этого члена структуры:

type SuperNum struct { 
    Num string `json:"num"` 
} 
+0

Так есть момент, где я хотел бы установить свойство в 'SuperNum' структуры на 'num'? Зачем? –

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