code: public JsonObject put(String name, JsonObject value) {
          if (this == value) {
              throw new IllegalArgumentException("Cannot put self");
          }
          content.put(name, value);
          if (value != null) {
              Map<String, String> paths = value.encryptionPathInfo();
              if (paths != null && !paths.isEmpty()) {
                  for (Map.Entry<String, String> entry : paths.entrySet()) {
                      addValueEncryptionInfo(name.replace("~", "~0").replace("/", "~1") + "/" + entry.getKey(), entry.getValue(), false);
                  }
                  value.clearEncryptionPaths();
              }
          }
          return this;
      }
docs: Stores a {@link JsonObject} value identified by the field name.
  
  @param name the name of the JSON field.
  @param value the value of the JSON field.
  @return the {@link JsonObject}.