Вы должны использовать var respBytes = []byte(``)
ИЛИ var respBytes = []byte(`{}`)
Теперь ваш вопрос, если мы удалим пустой json в struct, тогда он просто пропустит это.
Следующий код просто оставляет jsonData ResultStruct со значениями инициализации:
var jsonData ResultStruct
err := json.Unmarshal([]byte(`{}`), &jsonData)
fmt.Println(err)
fmt.Println(jsonData)
Теперь только при инициализации по умолчанию также будет напечатано то же самое:
var jsonData ResultStruct
fmt.Println(jsonData)
Единственный способпроверить, не был ли unmarshal успешным (или значимым), использовать тип указателя .По умолчанию указатели равны нулю (или при инициализации).Если данные в них правильно распакованы, они будут указывать на правильное значение, иначе они останутся равными нулю.Вы можете использовать это и использовать nil check для указателя как if jsonData.Result == nil {}
.
package main
import (
"encoding/json"
"fmt"
)
type ResultStruct struct {
Result *[]map[string]string `json:"result"`
}
func main() {
//case 1
var jsonData1 ResultStruct
err := json.Unmarshal([]byte(`{"result":[{"Name":"ADF","Job":"ENG"},{"Name":"ASK","Job":"TEST"}]}`), &jsonData1)
fmt.Println(err)
fmt.Println(jsonData1.Result)
fmt.Println()
//case 2
var jsonData2 ResultStruct
err = json.Unmarshal([]byte(`{}`), &jsonData1)
fmt.Println(err)
fmt.Println(jsonData2.Result)
}
В приведенном выше случае 2 мы можем проверить, имеет ли jsonData2.Result значение nil.Если это ноль, это означает, что Unmarshal не удалось получить результаты