private void setRowFieldFromParser(int fieldIndex, JsonParser parser) throws JsonParseException, IOException {

    PrimitiveObjectInspector poi = (PrimitiveObjectInspector) this.columnOIs.get(fieldIndex);
    if (JsonToken.VALUE_NULL == parser.getCurrentToken())
      return;  // leave the row-cell as null

    // set the field in the row to the writable from rowBase
    row.set(fieldIndex, rowBase.get(fieldIndex));

    switch (poi.getPrimitiveCategory()) {
    case BYTE:
      ((ByteWritable) row.get(fieldIndex)).set(parser.getByteValue());
      break;
    case SHORT:
      ((ShortWritable) row.get(fieldIndex)).set(parser.getShortValue());
      break;
    case INT:
      ((IntWritable) row.get(fieldIndex)).set(parser.getIntValue());
      break;
    case LONG:
      ((LongWritable) row.get(fieldIndex)).set(parser.getLongValue());
      break;
    case DOUBLE:
      ((DoubleWritable) row.get(fieldIndex)).set(parser.getDoubleValue());
      break;
    case FLOAT:
      ((FloatWritable) row.get(fieldIndex)).set(parser.getFloatValue());
      break;
    case BOOLEAN:
      ((BooleanWritable) row.get(fieldIndex)).set(parser.getBooleanValue());
      break;
    case DATE:    // DateWritable stores days not milliseconds.
      HiveShims.setDateWritable(row.get(fieldIndex), parseDate(parser));
      break;
    case TIMESTAMP:
      HiveShims.setTimeWritable(row.get(fieldIndex), parseTime(parser));
      break;
    default:    // STRING/unrecognized
      ((Text) row.get(fieldIndex)).set(parser.getText());
      break;
    }
  }
Copies the Writable at fieldIndex from rowBase to row, then sets the value of the Writable
to the value in parser

@param fieldIndex column index of field in row
@param parser JsonParser pointing to the attribute
@throws JsonParseException
@throws IOException
ql/src/java/org/apache/hadoop/hive/ql/udf/esri/serde/BaseJsonSerDe.java