{"record":{"id":"757c06facc47edd1","repo":"pentaho/pentaho-kettle","slug":"avroinput-error-unabletoparsearrayindex","errorCode":"AvroInput.Error.UnableToParseArrayIndex","errorMessage":"AvroInput.Error.UnableToParseArrayIndex","messagePattern":"AvroInput\\.Error\\.UnableToParseArrayIndex","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/avro-format/core/src/main/java/org/pentaho/di/trans/steps/avro/input/AvroNestedReader.java","lineNumber":547,"sourceCode":"    if ( array == null ) {\n      return null;\n    }\n\n    if ( avroInputField.getTempParts().size() == 0 ) {\n      throw new KettleException( BaseMessages.getString( PKG, \"AvroInput.Error.MalformedPathArray\" ) );\n    }\n\n    String part = avroInputField.getTempParts().remove( 0 );\n    if ( !( part.charAt( 0 ) == '[' ) ) {\n      throw new KettleException( BaseMessages.getString( PKG, \"AvroInput.Error.MalformedPathArray2\", part ) );\n    }\n\n    String index = part.substring( 1, part.indexOf( ']' ) );\n    int arrayI = 0;\n    try {\n      arrayI = Integer.parseInt( index.trim() );\n    } catch ( NumberFormatException e ) {\n      throw new KettleException( BaseMessages.getString( PKG, \"AvroInput.Error.UnableToParseArrayIndex\", index ) );\n    }\n\n    if ( part.indexOf( ']' ) < part.length() - 1 ) {\n      // more dimensions to the array\n      part = part.substring( part.indexOf( ']' ) + 1, part.length() );\n      avroInputField.getTempParts().add( 0, part );\n    }\n\n    if ( arrayI >= array.size() || arrayI < 0 ) {\n      return null;\n    }\n\n    Object element = array.get( arrayI );\n    Schema elementType = s.getElementType();\n\n    if ( element == null ) {\n      return null;\n    }","sourceCodeStart":529,"sourceCodeEnd":565,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/avro-format/core/src/main/java/org/pentaho/di/trans/steps/avro/input/AvroNestedReader.java#L529-L565","documentation":"Inside the array selector '[...]', the text between the brackets must parse as an integer element index. Integer.parseInt failed on the extracted index, so convertToKettleValue throws this KettleException including the bad index string.","triggerScenarios":"Writing a non-numeric index such as '$.tags[*' handled elsewhere, '$.tags[abc]', '$.tags[ ]', or '$.tags[01x]' in a field path where a numeric index is required.","commonSituations":"Typos in hand-written paths; pasting a map key where an array index is expected; whitespace/hidden characters inside the brackets.","solutions":["Replace the bracket content with a plain non-negative integer: '$.tags[2]'.","Use '[*]' if you want all elements expanded rather than a specific index.","Trim the path of stray spaces/characters inside brackets and re-save the step."],"exampleFix":"// before\n$.tags[abc]\n// after\n$.tags[0]","handlingStrategy":"validation","validationCode":"// Validate bracket content parses as an integer before configuring\njava.util.regex.Matcher m = java.util.regex.Pattern.compile(\"\\\\[(.*?)\\\\]\").matcher(path);\nwhile (m.find()) {\n  String idx = m.group(1).trim();\n  if (!idx.equals(\"*\") && !idx.matches(\"\\\\d+\")) {\n    throw new IllegalArgumentException(\"Bad array index: [\" + idx + \"]\");\n  }\n}","typeGuard":"boolean isIntegerIndex(String segment) {\n  if (segment == null || !segment.startsWith(\"[\")) return false;\n  String idx = segment.substring(1, segment.indexOf(']')).trim();\n  return idx.matches(\"\\\\d+\");\n}","tryCatchPattern":"try {\n  Object v = reader.convertToKettleValue(...);\n} catch (KettleException e) {\n  if (e.getMessage().contains(\"UnableToParseArrayIndex\")) {\n    // correct the index literal in the path and re-run\n  } else throw e;\n}","preventionTips":["Only plain non-negative integers belong inside array brackets","Use '[*]' when you mean 'all elements', not a keyword index","Trim whitespace and hidden characters from hand-edited paths"],"tags":["avro","path","index","pdi"],"backgroundTag":"invalid-argument-format","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}