Exemple #1
0
  private void writeValue(FieldReader reader) throws JsonGenerationException, IOException {
    final DataMode m = reader.getType().getMode();
    final MinorType mt = reader.getType().getMinorType();

    switch (m) {
      case OPTIONAL:
      case REQUIRED:
        switch (mt) {
          case FLOAT4:
            gen.writeFloat(reader);
            break;
          case FLOAT8:
            gen.writeDouble(reader);
            break;
          case INT:
            gen.writeInt(reader);
            break;
          case SMALLINT:
            gen.writeSmallInt(reader);
            break;
          case TINYINT:
            gen.writeTinyInt(reader);
            break;
          case BIGINT:
            gen.writeBigInt(reader);
            break;
          case BIT:
            gen.writeBoolean(reader);
            break;

          case DATE:
            gen.writeDate(reader);
            break;
          case TIME:
            gen.writeTime(reader);
            break;
          case TIMESTAMP:
            gen.writeTimestamp(reader);
            break;
          case INTERVALYEAR:
          case INTERVALDAY:
          case INTERVAL:
            gen.writeInterval(reader);
            break;
          case DECIMAL28DENSE:
          case DECIMAL28SPARSE:
          case DECIMAL38DENSE:
          case DECIMAL38SPARSE:
          case DECIMAL9:
          case DECIMAL18:
            gen.writeDecimal(reader);
            break;

          case LIST:
            // this is a pseudo class, doesn't actually contain the real reader so we have to drop
            // down.
            writeValue(reader.reader());
            break;
          case MAP:
            gen.writeStartObject();
            if (reader.isSet()) {
              for (String name : reader) {
                FieldReader childReader = reader.reader(name);
                if (childReader.isSet()) {
                  gen.writeFieldName(name);
                  writeValue(childReader);
                }
              }
            }
            gen.writeEndObject();
            break;
          case NULL:
            gen.writeUntypedNull();
            break;

          case VAR16CHAR:
            gen.writeVar16Char(reader);
            break;
          case VARBINARY:
            gen.writeBinary(reader);
            break;
          case VARCHAR:
            gen.writeVarChar(reader);
            break;
        }
        break;

      case REPEATED:
        gen.writeStartArray();
        switch (mt) {
          case FLOAT4:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeFloat(i, reader);
            }

            break;
          case FLOAT8:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeDouble(i, reader);
            }
            break;
          case INT:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeInt(i, reader);
            }
            break;
          case SMALLINT:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeSmallInt(i, reader);
            }
            break;
          case TINYINT:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeTinyInt(i, reader);
            }
            break;
          case BIGINT:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeBigInt(i, reader);
            }
            break;
          case BIT:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeBoolean(i, reader);
            }
            break;

          case DATE:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeDate(i, reader);
            }
            break;
          case TIME:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeTime(i, reader);
            }
            break;
          case TIMESTAMP:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeTimestamp(i, reader);
            }
            break;
          case INTERVALYEAR:
          case INTERVALDAY:
          case INTERVAL:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeInterval(i, reader);
            }
            break;
          case DECIMAL28DENSE:
          case DECIMAL28SPARSE:
          case DECIMAL38DENSE:
          case DECIMAL38SPARSE:
          case DECIMAL9:
          case DECIMAL18:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeDecimal(i, reader);
            }
            break;

          case LIST:
            for (int i = 0; i < reader.size(); i++) {
              while (reader.next()) {
                writeValue(reader.reader());
              }
            }
            break;
          case MAP:
            while (reader.next()) {
              gen.writeStartObject();
              for (String name : reader) {
                FieldReader mapField = reader.reader(name);
                if (mapField.isSet()) {
                  gen.writeFieldName(name);
                  writeValue(mapField);
                }
              }
              gen.writeEndObject();
            }
            break;
          case NULL:
            break;

          case VAR16CHAR:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeVar16Char(i, reader);
            }
            break;
          case VARBINARY:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeBinary(i, reader);
            }
            break;
          case VARCHAR:
            for (int i = 0; i < reader.size(); i++) {
              gen.writeVarChar(i, reader);
            }
            break;

          default:
            throw new IllegalStateException(String.format("Unable to handle type %s.", mt));
        }
        gen.writeEndArray();
        break;
    }
  }
 /**
  * Pretty-prints and formats the JSON payload.
  *
  * <p>This method calls the JsonLexer to parser the output of the builder, so this may not be an
  * optimal method to call, and should be used mainly for debugging purpose for a human-readable
  * output of the JSON content.
  *
  * @return a pretty printed JSON output
  */
 public String toPrettyString() {
   return JsonOutput.prettyPrint(toString());
 }
Exemple #3
0
 public void write(FieldReader reader) throws JsonGenerationException, IOException {
   writeValue(reader);
   gen.flush();
 }
 /**
  * Serializes the internal data structure built with the builder to a conformant JSON payload
  * string
  *
  * <p>Example:
  *
  * <pre><code>
  * def json = new JsonBuilder()
  * json { temperature 37 }
  *
  * assert json.toString() == '{"temperature":37}'
  * </code></pre>
  *
  * @return a JSON output
  */
 public String toString() {
   return JsonOutput.toJson(content);
 }