public static Map<String, Object> readMap(XContentParser parser, MapFactory mapFactory) throws IOException { Map<String, Object> map = mapFactory.newMap(); XContentParser.Token t = parser.currentToken(); if (t == null) { t = parser.nextToken(); } if (t == XContentParser.Token.START_OBJECT) { t = parser.nextToken(); } for (; t == XContentParser.Token.FIELD_NAME; t = parser.nextToken()) { // Must point to field name String fieldName = parser.currentName(); // And then the value... t = parser.nextToken(); Object value = readValue(parser, mapFactory, t); map.put(fieldName, value); } return map; }