public BlockAwareJsonParser(Parser delegate) { this.delegate = delegate; Token currentToken = delegate.currentToken(); if (currentToken != null && (currentToken == Token.START_OBJECT || currentToken == Token.START_ARRAY)) { this.open = 1; // start assuming that we are nested if the current parser token is a block start. } }
@Override public Token currentToken() { return delegate.currentToken(); }
private Object parseValue(Parser parser, FieldType esType) { Object obj; // special case of handing null (as text() will return "null") if (parser.currentToken() == Token.VALUE_NULL) { obj = null; } else { obj = reader.readValue(parser, parser.text(), esType); } parser.nextToken(); return obj; }
private static void traverseMap(Parser parser, Generator generator) { generator.writeBeginObject(); parser.nextToken(); for (; parser.currentToken() != Token.END_OBJECT;) { traverse(parser, generator); } generator.writeEndObject(); parser.nextToken(); }
private static void traverseArray(Parser parser, Generator generator) { generator.writeBeginArray(); parser.nextToken(); for (; parser.currentToken() != Token.END_ARRAY;) { traverse(parser, generator); } generator.writeEndArray(); parser.nextToken(); }
protected Object intValue(String value, Parser parser) { Integer val = null; if (value == null || isEmpty(value)) { return nullValue(); } else { Token tk = parser.currentToken(); if (tk == Token.VALUE_NUMBER) { val = parser.intValue(); } else { val = parseInteger(value); } } return processInteger(val); }
protected Object floatValue(String value, Parser parser) { Float val = null; if (value == null || isEmpty(value)) { return nullValue(); } else { Token tk = parser.currentToken(); if (tk == Token.VALUE_NUMBER) { val = parser.floatValue(); } else { val = parseFloat(value); } } return processFloat(val); }
protected Object byteValue(String value, Parser parser) { Byte val = null; if (value == null || isEmpty(value)) { return nullValue(); } else { Token tk = parser.currentToken(); if (tk == Token.VALUE_NUMBER) { val = (byte) parser.intValue(); } else { val = parseByte(value); } } return processByte(val); }
protected Object longValue(String value, Parser parser) { Long val = null; if (value == null || isEmpty(value)) { return nullValue(); } else { Token tk = parser.currentToken(); if (tk == Token.VALUE_NUMBER) { val = parser.longValue(); } else { val = parseLong(value); } } return processLong(val); }
protected Object doubleValue(String value, Parser parser) { Double val = null; if (value == null || isEmpty(value)) { return nullValue(); } else { Token tk = parser.currentToken(); if (tk == Token.VALUE_NUMBER) { val = parser.doubleValue(); } else { val = parseDouble(value); } } return processDouble(val); }
protected Object shortValue(String value, Parser parser) { Short val = null; if (value == null || isEmpty(value)) { return nullValue(); } else { Token tk = parser.currentToken(); if (tk == Token.VALUE_NUMBER) { val = parser.shortValue(); } else { val = parseShort(value); } } return processShort(val); }
protected Object date(String value, Parser parser) { Object val = null; if (value == null || isEmpty(value)) { return nullValue(); } else { Token tk = parser.currentToken(); // UNIX time format if (tk == Token.VALUE_NUMBER) { val = parseDate(parser.longValue(), richDate); } else { val = parseDate(value, richDate); } } return processDate(val); }
@Test public void testNoPath() throws Exception { assertNull(ParsingUtils.seek(parser, (String) null)); assertNull(parser.currentToken()); assertNull(ParsingUtils.seek(parser, "")); assertNull(parser.currentToken()); assertNull(ParsingUtils.seek(parser, " ")); assertNull(parser.currentToken()); }
@Test public void testNoSkipping() { String data = "{\"test\":\"value\"}"; // ^X Parser parser = new JacksonJsonParser(data.getBytes(Charset.defaultCharset())); assertThat(parser.nextToken(), equalTo(Parser.Token.START_OBJECT)); assertThat(parser.nextToken(), equalTo(Parser.Token.FIELD_NAME)); assertThat(parser.text(), equalTo("test")); BlockAwareJsonParser blockParser = new BlockAwareJsonParser(parser); blockParser.exitBlock(); assertThat(parser.currentToken(), equalTo(Parser.Token.FIELD_NAME)); assertThat(parser.text(), equalTo("test")); }
@Test public void testSkipping() { String data = "{\"test\":\"value\"}"; // ^ |-------------^ Parser parser = new JacksonJsonParser(data.getBytes(Charset.defaultCharset())); BlockAwareJsonParser blockParser = new BlockAwareJsonParser(parser); assertThat(blockParser.tokenCharOffset(), equalTo(0)); assertThat(blockParser.nextToken(), equalTo(Parser.Token.START_OBJECT)); assertThat(blockParser.nextToken(), equalTo(Parser.Token.FIELD_NAME)); assertThat(blockParser.text(), equalTo("test")); blockParser.exitBlock(); assertThat(blockParser.tokenCharOffset(), equalTo(15)); assertThat(parser.currentToken(), equalTo(Parser.Token.END_OBJECT)); assertThat(parser.nextToken(), nullValue()); }
@Test public void testSkippingAtStart() { String data = "{\"test\":\"value\"}"; // ^ |-------------^ Parser parser = new JacksonJsonParser(data.getBytes(Charset.defaultCharset())); assertThat(parser.nextToken(), equalTo(Parser.Token.START_OBJECT)); BlockAwareJsonParser blockParser = new BlockAwareJsonParser(parser); assertThat(blockParser.tokenCharOffset(), equalTo(0)); assertThat(blockParser.nextToken(), equalTo(Parser.Token.FIELD_NAME)); assertThat(blockParser.text(), equalTo("test")); blockParser.exitBlock(); assertThat(blockParser.tokenCharOffset(), equalTo(15)); assertThat(parser.currentToken(), equalTo(Parser.Token.END_OBJECT)); assertThat(parser.nextToken(), nullValue()); }
@Test public void testSkippingAtArrayStart() { String data = "{\"array\":[{\"test\":\"value\"}]}"; // ^--------------------^ Parser parser = new JacksonJsonParser(data.getBytes(Charset.defaultCharset())); assertThat(parser.nextToken(), equalTo(Parser.Token.START_OBJECT)); assertThat(parser.nextToken(), equalTo(Parser.Token.FIELD_NAME)); assertThat(parser.text(), equalTo("array")); assertThat(parser.nextToken(), equalTo(Parser.Token.START_ARRAY)); BlockAwareJsonParser blockParser = new BlockAwareJsonParser(parser); blockParser.exitBlock(); assertThat(parser.currentToken(), equalTo(Parser.Token.END_ARRAY)); assertThat(parser.nextToken(), equalTo(Parser.Token.END_OBJECT)); assertThat(parser.nextToken(), nullValue()); }
@Test public void testFieldNestedButNotOnFirstLevel() throws Exception { assertNull(ParsingUtils.seek(parser, "state")); assertNull(parser.nextToken()); assertNull(parser.currentToken()); }
@Test public void testFieldName() throws Exception { assertNotNull(ParsingUtils.seek(parser, "age")); assertEquals(Token.VALUE_NUMBER, parser.currentToken()); assertEquals("age", parser.currentName()); }
@Test public void testOneLevelNestedField() throws Exception { assertNotNull(ParsingUtils.seek(parser, "address.state")); assertEquals(Token.VALUE_STRING, parser.currentToken()); assertEquals("state", parser.currentName()); }