2017-07-25 50 views
0

我是Go的新手。我試圖獲取和編組JSON數據到一個結構。我的樣本數據是這樣的:前往json.Unmarshal實地案例

var reducedFieldData = []byte(`[ 
    {"model":"Traverse","vin":"1gnkrhkd6ej111234"} 
    ,{"model":"TL","vin":"19uua66265a041234"} 
]`) 

如果我定義結構用於接收這樣的數據:

type Vehicle struct { 
    Model string 
    Vin string 
} 

按預期工作,以解組的電話。但是,如果我使用小寫字段(「model」和「vin」),它們實際上與數據中的字段名稱匹配,它將返回值的空字符串。

這是預期的行爲?會議可以關閉嗎?

+3

可能重複[我的結構不編組到json](https://stackoverflow.com/questions/15452004/my-structures-are-not-marshalling-into-json) – RickyA

回答

2

需要導出字段(用大寫的第一個字母聲明)或反射庫無法編輯它們。由於JSON(un)編組器使用反射,因此無法讀取或寫入未導出的字段。

所以是的,它是預期的,不,你不能改變它。抱歉。

您可以添加標籤到現場來改變編組使用的名稱:

Model string `json:"model"` 

爲場上標籤「編碼/ JSON」支持的更多信息,請參見the documentation

+0

感謝您的答案。如果嘗試解組包含「model」和「Model」的文檔,會發生什麼情況?顯然,你不想定義這個,但我們並不總是在控制如何定義數據源:) – jrf

+0

然後字段「模型」將不會存儲在任何地方AFAIK。你可以在你的結構中添加兩個字段(帶有適當的標籤),但那會很麻煩。該庫假定字段名稱區分大小寫,並且不存在避免這種情況的簡單方法。如果您真的必須同時處理這兩個問題,請參閱[文檔的這一部分](https://golang.org/pkg/encoding/json/#Unmarshaler)以瞭解您的需求。 –