如果在Golang中解組時發現字段未在json中發生,是否可能產生錯誤?我無法在文檔中找到它。是否有任何標籤根據需要指定字段?在Golang中解組json:必填字段?
28
A
回答
34
encoding/json
軟件包中沒有將字段設置爲「required」的標籤。您將不得不編寫自己的MarshalJSON()
方法,或者對丟失的字段進行檢查。
要檢查是否有遺漏的字段,你將不得不使用指針,以便丟失/空和零值來區分:
type JsonStruct struct {
String *string
Number *float64
}
全部工作示例:
package main
import (
"fmt"
"encoding/json"
)
type JsonStruct struct {
String *string
Number *float64
}
var rawJson = []byte(`{
"string":"We do not provide a number"
}`)
func main() {
var s *JsonStruct
err := json.Unmarshal(rawJson, &s)
if err != nil {
panic(err)
}
if s.String == nil {
panic("String is missing or null!")
}
if s.Number == nil {
panic("Number is missing or null!")
}
fmt.Printf("String: %s Number: %f\n", *s.String, *s.Number)
}
2
您也可以覆蓋特定類型的解組(而不必將該字段設置爲指針,從而將必填字段隱藏在幾個json圖層中)。
type EnumItem struct {
Named
Value string
}
func (item *EnumItem) UnmarshalJSON(data []byte) (err error) {
required := struct {
Value *string `json:"value"`
}{}
all := struct {
Named
Value string `json:"value"`
}{}
err = json.Unmarshal(data, &required)
if err != nil {
return
} else if required.Value == nil {
err = fmt.Errorf("Required field for EnumItem missing")
} else {
err = json.Unmarshal(data, &all)
item.Named = all.Named
item.Value = all.Value
}
return
}
相關問題
- 1. JSON數組需要必填字段
- 2. JSON Schema:必填字段
- 3. Json有多個字段中的一個必填字段
- 4. Golang JSON Python字符串解組
- 5. Golang不當JSON解組
- 6. flex中的必填字段
- 7. 必填字段在Javascript
- 8. CSVHelper必填字段
- 9. 表必填字段
- 10. 必填字段InfoPath
- 11. JSON在Golang中的解析
- 12. 在Golang中解碼json
- 13. Golang JSON解析
- 14. 輸入字段必填字段
- 15. 如何讓字段爲必填字段?
- 16. 必填字段上collection_select類型字段
- 17. 必填字段'LogicalName'缺少字段'Target'
- 18. Solr - 缺少必填字段
- 19. 必填字段驗證
- 20. jquery必填字段錯誤
- 21. Mechanical Turk必填字段
- 22. 必填字段和asp.net
- 23. JSF驗證必填字段
- 24. 必填字段驗證器
- 25. 驗證非必填字段
- 26. OmniFaces必填字段1.6.1
- 27. Kohana 3.3:必填字段
- 28. WooCommerce必填字段錯誤
- 29. 必填字段missng錯誤
- 30. 是textarea必填字段嗎?
或者你可以檢查默認值,這對大多數情況來說可能是足夠的(除非你使用數字)。 – Matt3o12
但是如果「必填字段」的值是默認值呢? – AJPennster
如果數字的必填字段可能爲0,並且您還需要檢查其是否提供,則使用字符串的替代方法來檢查沒有輸入,然後將字符串轉換爲數字。 – Zanven