final JSONObject leadJson = json.optJSONObject("lead");
final BasicUser lead = leadJson != null ? JsonParseUtil.parseBasicUser(leadJson) : null;
final String assigneeTypeStr = JsonParseUtil.getOptionalString(json, "assigneeType");
final Component.AssigneeInfo assigneeInfo;
if (assigneeTypeStr != null) {
final AssigneeType assigneeType = parseAssigneeType(assigneeTypeStr);
final JSONObject assigneeJson = json.optJSONObject("assignee");
final BasicUser assignee = assigneeJson != null ? JsonParseUtil.parseBasicUser(assigneeJson) : null;
final AssigneeType realAssigneeType = parseAssigneeType(json.getString("realAssigneeType"));
final JSONObject realAssigneeJson = json.optJSONObject("realAssignee");
final BasicUser realAssignee = realAssigneeJson != null ? JsonParseUtil.parseBasicUser(realAssigneeJson) : null;
final boolean isAssigneeTypeValid = json.getBoolean("isAssigneeTypeValid");
assigneeInfo = new Component.AssigneeInfo(assignee, assigneeType, realAssignee, realAssigneeType, isAssigneeTypeValid);
} else {