public static Token seek(Parser parser, String[] path1) { return seek(parser, path1, null); }
public void process(BytesArray storage) { // no extractors, no lookups if (ObjectUtils.isEmpty(paths)) { return; } results.clear(); if (log.isTraceEnabled()) { log.trace(String.format("About to look for paths [%s] in doc [%s]", Arrays.toString(paths), storage)); } results.addAll(ParsingUtils.values(new JacksonJsonParser(storage.bytes(), 0, storage.length()), paths)); }
break; default: value = new RawJson(readValueAsString(parser)); case START_OBJECT: if (level < maxNesting && nextLevel != null) { doFind(parser, nextLevel, level + 1, maxNesting); } else { parser.skipChildren();
switch (t) { case START_OBJECT: traverseMap(parser, generator); break; case START_ARRAY: traverseArray(parser, generator); break; case FIELD_NAME: generator.writeFieldName(parser.currentName()); parser.nextToken(); traverse(parser, generator); break; case VALUE_STRING:
Assert.notNull(ParsingUtils.seek(parser, ID), "no id found"); reader.endField(absoluteName); t = ParsingUtils.seek(parser, SOURCE, FIELDS); int charStart = parser.tokenCharOffset(); ParsingUtils.skipCurrentBlock(parser); ParsingUtils.skipCurrentBlock(parser); t = parser.nextToken();
private static String readValueAsString(Parser parser) { FastByteArrayOutputStream out = new FastByteArrayOutputStream(256); JacksonJsonGenerator generator = new JacksonJsonGenerator(out); traverse(parser, generator); generator.close(); return out.toString(); }
public static Token seek(Parser parser, String[] path1, String[] path2) { return doSeekToken(parser, path1, 0, path2, 0); }
public static List<Object> values(Parser parser, String... paths) { List<Matcher> matchers = new ArrayList<Matcher>(paths.length); int maxNesting = 0; for (String path : paths) { Matcher matcher = new Matcher(path); matchers.add(matcher); if (matcher.nesting() > maxNesting) { maxNesting = matcher.nesting(); } } doFind(parser, matchers, 0, maxNesting); List<Object> matches = new ArrayList<Object>(); for (Matcher matcher : matchers) { matches.add(matcher.matched ? matcher.value : NOT_FOUND); } return matches; }
ParsingUtils.skipCurrentBlock(parser); parser.nextToken();
switch (t) { case START_OBJECT: traverseMap(parser, generator); break; case START_ARRAY: traverseArray(parser, generator); break; case FIELD_NAME: generator.writeFieldName(parser.currentName()); parser.nextToken(); traverse(parser, generator); break; case VALUE_STRING:
Assert.notNull(ParsingUtils.seek(parser, ID), "no id found"); reader.endField(absoluteName); t = ParsingUtils.seek(parser, SOURCE, FIELDS); int charStart = parser.tokenCharOffset(); ParsingUtils.skipCurrentBlock(parser); ParsingUtils.skipCurrentBlock(parser); t = parser.nextToken();
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(); }
if (path1 != null && currentName.equals(path1[index1])) { if (index1 + 1 < path1.length) { return doSeekToken(parser, path1, index1 + 1, null, 0); return doSeekToken(parser, null, 0, path2, index2 + 1);
public static List<Object> values(Parser parser, String... paths) { List<Matcher> matchers = new ArrayList<Matcher>(paths.length); int maxNesting = 0; for (String path : paths) { Matcher matcher = new Matcher(path); matchers.add(matcher); if (matcher.nesting() > maxNesting) { maxNesting = matcher.nesting(); } } doFind(parser, matchers, 0, maxNesting); List<Object> matches = new ArrayList<Object>(); for (Matcher matcher : matchers) { matches.add(matcher.matched ? matcher.value : NOT_FOUND); } return matches; }
ParsingUtils.skipCurrentBlock(parser); parser.nextToken();
/** * Seeks the field with the given name in the stream and positions (and returns) the parser to the next available token (value or not). * Return null if no token is found. * * @param path * @param parser * @return token associated with the given path or null if not found */ public static Token seek(Parser parser, String path) { // return current token if no path is given if (!StringUtils.hasText(path)) { return null; } List<String> tokens = StringUtils.tokenize(path, "."); return seek(parser, tokens.toArray(new String[tokens.size()])); }
switch (t) { case START_OBJECT: traverseMap(parser, generator); break; case START_ARRAY: traverseArray(parser, generator); break; case FIELD_NAME: generator.writeFieldName(parser.currentName()); parser.nextToken(); traverse(parser, generator); break; case VALUE_STRING:
@Test public void testRichObject() throws Exception { List<Object> vals = ParsingUtils.values(parser, "address"); assertEquals(1, vals.size()); assertThat(vals.get(0).toString(), containsString("floors")); }
break; default: value = new RawJson(readValueAsString(parser)); case START_OBJECT: if (level < maxNesting && nextLevel != null) { doFind(parser, nextLevel, level + 1, maxNesting); } else { parser.skipChildren();
Assert.notNull(ParsingUtils.seek(parser, ID), "no id found"); reader.endField(absoluteName); t = ParsingUtils.seek(parser, SOURCE, FIELDS); int charStart = parser.tokenCharOffset(); ParsingUtils.skipCurrentBlock(parser); ParsingUtils.skipCurrentBlock(parser); t = parser.nextToken();