我正在使用反射包创建一个可重用的JSON解析器,该解析器在运行时将JSON数据映射到特定的结构。
我希望它能检测到某个特定的必填字段何时丢失。
我使用以下命令创建了一个变量"parsedInput“:
parsedInput := reflect.New(reflect.TypeOf(exampleInputObject).Elem())然后,我使用JSON库将数据解析为该变量。现在我想遍历这些值,以找出缺少的内容:
for i := 0; i < parsedInput.Elem().NumField(); i++ {
logger.Info("Field name was: " + field.Name)
fieldType := fmt.Sprintf("'%v'", field.Type.Kind().String())
logger.Info("Field type was: " + fieldType)
interfaceValue := fmt.Sprintf("'%v'", parsedInput.Elem().Field(i).Interface())
logger.Info("Interface value was: " + interfaceValue)
//Look to see if the field is a null pointer. If so, this could be an issue
if (field.Type.Kind().String() == "ptr") && (parsedInput.Elem().Field(i).Interface() == nil) {
//Do null pointer stuff here
}
}对于缺少的字段,我会看到日志输出
Field name was: MissingFieldName
Field type was 'ptr'
Interface value was '<nil>'然而,我的代码永远不会陷入空指针逻辑--我做错了什么?
发布于 2020-05-20 15:27:29
根据上面的评论-我设法使用反射包中的内置函数解决了这个问题-特别是通过测试:
Reflect.ValueOf(parsedInput.Elem().Field(i).Interface()).IsNil()https://stackoverflow.com/questions/61907009
复制相似问题