public static S3MultipartETag deserialize(String encodedETagStr) throws IOException {
    String eTagStr = new String(Base64.decodeBase64(encodedETagStr));
    JsonNode rootNode;
    try {
      rootNode = objectMapper.readTree(eTagStr);
    } catch (JsonProcessingException e) {
      throw new IOException("Not expected JSON content " + eTagStr + e.getMessage());
    }

    // version id
    JsonNode jsonNode = rootNode.get(VERSION);
    short version = jsonNode.shortValue();
    if (version != VERSION_1) {
      throw new IOException("Wrong version number " + eTagStr);
    }

    // data chunk list
    jsonNode = rootNode.get(DATA_CHUNK_LIST);
    PutBlobMetaInfo putBlobMetaInfo = PutBlobMetaInfo.deserialize(jsonNode.toString());
    return new S3MultipartETag(putBlobMetaInfo.getOrderedChunkIdSizeList());
  }
Deserialize the Json String to {@link S3MultipartETag}
@return the {@link S3MultipartETag}
ambry-api/src/main/java/com/github/ambry/frontend/s3/S3MultipartETag.java