agent/utils/json.go
func CompleteJsonUnmarshal(b []byte, iface interface{}) error {
	keys, err := JsonKeys(b)
	if err != nil {
		return err
	}

	structType := reflect.ValueOf(iface).Type()

	for _, key := range keys {
		_, found := structType.FieldByNameFunc(func(name string) bool {
			structField, _ := structType.FieldByName(name)
			jsonTag := structField.Tag.Get("json")
			jsonName := strings.Split(jsonTag, ",")[0]
			if jsonName == key {
				return true
			}
			if strings.EqualFold(key, structField.Name) {
				return true
			}
			return false
		})
		if !found {
			// We encountered a json key that there was no corresponding struct
			// field for; this is not complete
			return errors.New("Unrecognized key: " + key)
		}
	}
	return nil
}
func CompleteJsonUnmarshal(b []byte, iface interface{}) error {
	keys, err := JsonKeys(b)
	if err != nil {
		return err
	}

	structType := reflect.ValueOf(iface).Type()

	for _, key := range keys {
		_, found := structType.FieldByNameFunc(func(name string) bool {
			structField, _ := structType.FieldByName(name)
			jsonTag := structField.Tag.Get("json")
			jsonName := strings.Split(jsonTag, ",")[0]
			if jsonName == key {
				return true
			}
			if strings.EqualFold(key, structField.Name) {
				return true
			}
			return false
		})
		if !found {
			// We encountered a json key that there was no corresponding struct
			// field for; this is not complete
			return errors.New("Unrecognized key: " + key)
		}
	}
	return nil
}
func CompleteJsonUnmarshal ( b [ ] byte , iface interface { } ) error { keys , err := JsonKeys ( b ) if err != nil { return err } structType := reflect . ValueOf ( iface ) . Type ( ) for _ , key := range keys { _ , found := structType . FieldByNameFunc ( func ( name string ) bool { structField , _ := structType . FieldByName ( name ) jsonTag := structField . Tag . Get ( " " ) jsonName := strings . Split ( jsonTag , " " ) [ 0 ] if jsonName == key { return true } if strings . EqualFold ( key , structField . Name ) { return true } return false } ) if ! found { // We encountered a json key that there was no corresponding struct // field for; this is not complete return errors . New ( " " + key ) } } return nil }
// CompleteJsonUnmarshal determines if a given struct has members corresponding
// to every key of a json object (passed as the json string).
// By default, Go ignores fields in an object which have no corresponding struct
// member and this can be used to determine if this ignoring has occurred
// Errors will result in "false" as a return value
CompleteJsonUnmarshal determines if a given struct has members corresponding to every key of a json object ( passed as the json string ) . By default Go ignores fields in an object which have no corresponding struct member and this can be used to determine if this ignoring has occurred Errors will result in false as a return value