code: private void uploadJsonRevision(final RevisionInternal rev) {
          // Get the revision's properties:
          if (!db.inlineFollowingAttachmentsIn(rev)) {
              setError(new CouchbaseLiteException(Status.BAD_ATTACHMENT));
              return;
          }
  
          final String path = String.format(Locale.ENGLISH, "%s?new_edits=false", encodeDocumentId(rev.getDocID()));
          CustomFuture future = sendAsyncRequest("PUT",
                  path,
                  rev.getProperties(),
                  new RemoteRequestCompletion() {
                      public void onCompletion(RemoteRequest remoteRequest, Response httpResponse, Object result, Throwable e) {
                          if (e != null) {
                              setError(e);
                          } else {
                              Log.v(TAG, "%s: Sent %s (JSON), response=%s", this, rev, result);
                              removePending(rev);
                          }
                      }
                  });
          future.setQueue(pendingFutures);
          pendingFutures.add(future);
      }
docs: Fallback to upload a revision if uploadMultipartRevision failed due to the server's rejecting
  multipart format.
  - (void) uploadJSONRevision: (CBL_Revision*)originalRev in CBLRestPusher.m