在使用Golang編寫程序的過程中,JSON是一個常用的數據交換格式。然而,在處理JSON數據時,如果出現沒有傳值的情況,就需要進行處理。
func main() {
var jsonString string
// 模擬沒有傳值的情況
err := json.Unmarshal([]byte{}, &jsonString)
// 錯誤處理
if err != nil {
fmt.Println("JSON數據傳輸失敗", err)
}
fmt.Println(jsonString)
}
這里使用了函數json.Unmarshal()來將JSON數據解碼后賦值給jsonString變量。然而,在模擬沒有傳值的情況時,將[]byte{}作為第一個參數使用,則會觸發JSON數據傳輸失敗。
如果需要在解碼JSON數據時處理沒有傳值的情況,需要使用json.Decoder()來進行處理。具體代碼如下:
func main() {
type User struct {
Name string
Age int
BirthDate string
}
var jsonStr string
//模擬傳過來的 JSON 字符串
jsonStr = `{"name": "John", "age": 30}`
//將JSON數據解碼
dec := json.NewDecoder(strings.NewReader(jsonStr))
for{
t,err := dec.Token()
if err == io.EOF{
break
}
if err!=nil{
log.Fatal(err)
}
if t == nil{
continue
}
switch et:=t.(type){
case string:
fmt.Printf("%v : \n",et)
err = dec.Decode(&User{
})
if err!= nil{
fmt.Println(err)
}
fmt.Println(User)
case json.Delim:
fmt.Println("delimiter : ",et)
default:
fmt.Printf("not supported : %T",et)
}
}
}
這里使用json.NewDecoder()與io.EOF來處理JSON數據的解碼,如果出現沒有傳值的情況,也可以正確解碼。
下一篇mysql動態過濾