docs: protected void decompressData(ArrayList arr) {
  
          HashMap fstData = null; // The first data record (Map type)
          HashMap cprData;        // The following data record which will be compressed
          for (Object sub : arr) {
              if (sub instanceof ArrayList) {
                  // iterate sub array nodes
                  decompressData((ArrayList) sub);
              } else if (sub instanceof HashMap) {
                  // iterate sub data nodes
                  decompressData((HashMap) sub);
                  // Compress data for current array
                  if (fstData == null) {
                      // Get first data node
                      fstData = (HashMap) sub;
                  } else {
                      cprData = (HashMap) sub;
                      // The omitted data will be recovered to the following map; Only data item (String type) will be processed
                      for (Object key : fstData.keySet()) {
                          if (!cprData.containsKey(key)) {
                              cprData.put(key, fstData.get(key));
                          }
                      }
                  }
              } else {
              }
          }
      }