JSON as part of an update [PUT] API call

Can someone tell me why setting a value to NULL leaves it unchanged?  Is it t.rue for all fields.  Has it always been true, this is some old code I am working on and I am sure it used to work

---Chat between me and one of our devs--
Notice the finalized_on field in the two JSONs below.  I do not understand it but when you send a NULL it fails to see that as a change and leaves the date unchanged but if you send an empty string it does what we want it to do.  Currently I do not know if this is just a date/datetime thing or all fields or some subset of fields.  I am working on that right now.This DOES NOT work
{
  "id": 1360018,
  "contract_received_on": "2021-07-01T00:00:00",
  "contractrec": "2021-07-01T00:00:00",
  "depositrec": null,
  "contract_payment_date_c": null,
  "e_a_date_c": null,
  "port_request_date_c": null,
  "cancellation_date_c": null,
  "finalized_on": null,
  "portal_contract_upload_date_c": null,
  "contract_revision": null,
  "portal_contract_upload_revi_c": null,
  "cancellation_reason_c": null,
  "cancellation_type_c": null,
  "partnerservices_install_c": "0",
  "partnerservices_configuratio_c": "0",
  "partnerservices_training_c": "0",
  "partnerservices_porting_c": "0"
 }But this DOES work
{
  "id": 1360018,
  "contract_received_on": "2021-07-01T00:00:00",
  "contractrec": "2021-07-01T00:00:00",
  "depositrec": null,
  "contract_payment_date_c": null,
  "e_a_date_c": null,
  "port_request_date_c": null,
  "cancellation_date_c": null,
  "finalized_on": "",
  "portal_contract_upload_date_c": null,
  "contract_revision": null,
  "portal_contract_upload_revi_c": null,
  "cancellation_reason_c": null,
  "cancellation_type_c": null,
  "partnerservices_install_c": "0",
  "partnerservices_configuratio_c": "0",
  "partnerservices_training_c": "0",
  "partnerservices_porting_c": "0"
 }