add list parse methods to XContentParser
This commit is contained in:
parent
028f31b7d6
commit
411a719a86
|
@ -23,6 +23,7 @@ import org.apache.lucene.util.BytesRef;
|
|||
import org.elasticsearch.common.lease.Releasable;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
|
@ -130,6 +131,10 @@ public interface XContentParser extends Releasable {
|
|||
|
||||
Map<String, Object> mapOrdered() throws IOException;
|
||||
|
||||
List<Object> list() throws IOException;
|
||||
|
||||
List<Object> listOrderedMap() throws IOException;
|
||||
|
||||
String text() throws IOException;
|
||||
|
||||
String textOrNull() throws IOException;
|
||||
|
|
|
@ -213,6 +213,16 @@ public abstract class AbstractXContentParser implements XContentParser {
|
|||
return readOrderedMap(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Object> list() throws IOException {
|
||||
return readList(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Object> listOrderedMap() throws IOException {
|
||||
return readListOrderedMap(this);
|
||||
}
|
||||
|
||||
static interface MapFactory {
|
||||
Map<String, Object> newMap();
|
||||
}
|
||||
|
@ -239,6 +249,14 @@ public abstract class AbstractXContentParser implements XContentParser {
|
|||
return readMap(parser, ORDERED_MAP_FACTORY);
|
||||
}
|
||||
|
||||
static List<Object> readList(XContentParser parser) throws IOException {
|
||||
return readList(parser, SIMPLE_MAP_FACTORY);
|
||||
}
|
||||
|
||||
static List<Object> readListOrderedMap(XContentParser parser) throws IOException {
|
||||
return readList(parser, ORDERED_MAP_FACTORY);
|
||||
}
|
||||
|
||||
static Map<String, Object> readMap(XContentParser parser, MapFactory mapFactory) throws IOException {
|
||||
Map<String, Object> map = mapFactory.newMap();
|
||||
XContentParser.Token token = parser.currentToken();
|
||||
|
@ -259,15 +277,16 @@ public abstract class AbstractXContentParser implements XContentParser {
|
|||
return map;
|
||||
}
|
||||
|
||||
private static List<Object> readList(XContentParser parser, MapFactory mapFactory, XContentParser.Token token) throws IOException {
|
||||
static List<Object> readList(XContentParser parser, MapFactory mapFactory) throws IOException {
|
||||
ArrayList<Object> list = new ArrayList<>();
|
||||
XContentParser.Token token;
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
|
||||
list.add(readValue(parser, mapFactory, token));
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
private static Object readValue(XContentParser parser, MapFactory mapFactory, XContentParser.Token token) throws IOException {
|
||||
static Object readValue(XContentParser parser, MapFactory mapFactory, XContentParser.Token token) throws IOException {
|
||||
if (token == XContentParser.Token.VALUE_NULL) {
|
||||
return null;
|
||||
} else if (token == XContentParser.Token.VALUE_STRING) {
|
||||
|
@ -288,7 +307,7 @@ public abstract class AbstractXContentParser implements XContentParser {
|
|||
} else if (token == XContentParser.Token.START_OBJECT) {
|
||||
return readMap(parser, mapFactory);
|
||||
} else if (token == XContentParser.Token.START_ARRAY) {
|
||||
return readList(parser, mapFactory, token);
|
||||
return readList(parser, mapFactory);
|
||||
} else if (token == XContentParser.Token.VALUE_EMBEDDED_OBJECT) {
|
||||
return parser.binaryValue();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue