code: func (d DecrypterJSON) decryptJSON(data map[string]interface{}, decryptFunc DecryptFunc) error {
  	for k, v := range data {
  		switch t := v.(type) {
  		case string:
  			if s := strings.TrimPrefix(t, d.prefix); s != t {
  				s, err := base64.URLEncoding.DecodeString(s)
  				if err != nil {
  					return err
  				}
  
  				decryptedData, err := decryptFunc(s)
  				if err != nil {
  					return err
  				}
  
  				data[k] = string(decryptedData)
  			}
  		case map[string]interface{}:
  			err := d.decryptJSON(t, decryptFunc)
  			if err != nil {
  				return err
  			}
  		}
  	}
  
  	return nil
  }
docs: // decryptJSON recursively navigates JSON structure and tries to decrypt all string values with Prefix