pentaho/pentaho-kettle · error · KettleException

JsonInput.Log.NoField

JsonInput.Log.NoField

Error message

JsonInput.Log.NoField

What it means

JsonInput's prepareToRowProcessing throws KettleException with key JsonInput.Log.NoField when the 'Field value' (the JSON source field to parse) is empty. The step logs the same message and aborts before processing rows.

Solutions

  1. Open the JSON Input step and set the 'Field value' to the incoming field that contains the JSON text.
  2. Run 'Get Fields' on the step to pick a valid source field from the previous step.
  3. If settings were lost during migration, re-enter the step configuration and re-save the transformation.

Example fix

// before: no source field configured
meta.setFieldValue( null );
// after: point at the field holding the JSON payload
meta.setFieldValue( "json_payload" );
Defensive patterns

Strategy: validation

Validate before calling

if (meta.getFieldValue() == null || meta.getFieldValue().trim().isEmpty()) {
  throw new IllegalArgumentException("JSON Input requires a source 'Field value' pointing at the field containing the JSON text");
}

Try / catch

try { trans.execute(...); } catch (KettleException e) { if (e.getMessage().contains("NoField")) { /* open step and set the Field value */ } }

Prevention

When it happens

Trigger: processRow -> prepareToRowProcessing finds Utils.isEmpty(meta.getFieldValue()), i.e. no source field was selected in the step settings.

Common situations: Freshly added step where 'Field value' was never filled; transformation migrated from another environment losing settings; user cleared the field while editing.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/7a9a7466e5102a36. Report an issue: GitHub.

Appendix: source

Thrown at plugins/json/core/src/main/java/org/pentaho/di/trans/steps/jsoninput/JsonInput.java:167

      if ( !meta.isDoNotFailIfNoFile() && data.files.nrOfFiles() == 0 ) {
        String errMsg = BaseMessages.getString( PKG, "JsonInput.Log.NoFiles" );
        logError( errMsg );
        inputError( errMsg );
      }
    } else {
      data.readrow = getRow();
      data.inputRowMeta = getInputRowMeta();
      if ( data.inputRowMeta == null ) {
        data.hasFirstRow = false;
        return;
      }
      data.hasFirstRow = true;
      data.outputRowMeta = data.inputRowMeta.clone();

      // Check if source field is provided
      if ( Utils.isEmpty( meta.getFieldValue() ) ) {
        logError( BaseMessages.getString( PKG, "JsonInput.Log.NoField" ) );
        throw new KettleException( BaseMessages.getString( PKG, "JsonInput.Log.NoField" ) );
      }

      // cache the position of the field
      if ( data.indexSourceField < 0 ) {
        data.indexSourceField = getInputRowMeta().indexOfValue( meta.getFieldValue() );
        if ( data.indexSourceField < 0 ) {
          logError( BaseMessages.getString( PKG, "JsonInput.Log.ErrorFindingField", meta.getFieldValue() ) );
          throw new KettleException( BaseMessages.getString( PKG, "JsonInput.Exception.CouldnotFindField",
            meta.getFieldValue() ) );
        }
      }

      // if RemoveSourceField option is set, we remove the source field from the output meta
      if ( meta.isRemoveSourceField() ) {
        data.outputRowMeta.removeValueMeta( data.indexSourceField );
        // Get total previous fields minus one since we remove source field
        data.totalpreviousfields = data.inputRowMeta.size() - 1;
      } else {

View on GitHub (pinned to f3058517a1)