code: private void parsePropertiesMetadata(JsonParser jp) throws IOException, SQLException {
          jp.nextToken();//START_OBJECT {
          while (jp.nextToken() != JsonToken.END_OBJECT) {
              String fieldName = TableLocation.quoteIdentifier(jp.getText().toUpperCase(), isH2); //FIELD_NAME columnName 
              JsonToken value = jp.nextToken();
              if (null != value) switch (value) {
                  case VALUE_STRING:
                      cachedColumnNames.put(fieldName, "VARCHAR");
                      break;
                  case VALUE_TRUE:
                  case VALUE_FALSE:
                      cachedColumnNames.put(fieldName, "BOOLEAN");
                      break;
                  case VALUE_NUMBER_FLOAT:
                      cachedColumnNames.put(fieldName, "DOUBLE PRECISION");
                      break;
                  case VALUE_NUMBER_INT:
                      cachedColumnNames.put(fieldName, "BIGINT");
                      break;
                  case START_ARRAY:
                      cachedColumnNames.put(fieldName, "ARRAY");
                      parseArrayMetadata(jp);
                      break;
                  case START_OBJECT:
                      cachedColumnNames.put(fieldName, "VARCHAR");
                      parseObjectMetadata(jp);
                      break;
                  case VALUE_NULL:
                      cachedColumnNames.put(fieldName, "VARCHAR");
                  //ignore other value
                  default:
                      break;
              }
          }
      }
docs: Parses the properties of a feature
  
  Syntax:
  
  "properties": {"prop0": "value0"}
  
  @param jp