@Override
  public Map<String, Item> parse(JsonPullParser parser, OnJsonObjectAddListener listener)
      throws IOException, JsonFormatException {

    State state = parser.lookAhead();

    if (state == State.VALUE_NULL) {
      return null;
    }

    Map<String, Item> resultMap = new HashMap<String, Item>();

    state = parser.getEventType();
    if (state != State.START_HASH) {
      throw new JsonFormatException("expected state is START_HASH, but get=" + state);
    }

    while ((state = parser.lookAhead()) != State.END_HASH) {

      state = parser.getEventType();

      if (state != State.KEY) {
        throw new JsonFormatException("expected state is VALUE_STRING, but get=" + state);
      }
      String key = parser.getValueString();

      Item item = ItemGenerated.get(parser, listener);
      resultMap.put(key, item);
    }
    parser.getEventType();

    return resultMap;
  }