Изменить вложенные настройки, удалить поле и заменить список

Ответы получены от MySQL через X Protocol. Созданные программой учебные объекты после чтения удалены.

Наблюдаемый результат программы
НаблюдениеРезультат
Цвет доwhite
Цвет послеblue
Ширина сохранена200
Email сохранёнshop@example.test
Телефон присутствует после patchнет
Метки после patchfeatured
Добавлена гарантия, месяцев24
Телефон присутствует после set(null)да
Значение телефона после set(null)null
Строки и дополнительные наблюдения
{
    "before": {
        "_id": "CARD",
        "tags": [
            "sale",
            "new"
        ],
        "title": "Панель товара",
        "contact": {
            "email": "shop@example.test",
            "phone": "+7 000 000-00-00"
        },
        "display": {
            "color": "white",
            "width": 200
        }
    },
    "patch": {
        "display": {
            "color": "blue"
        },
        "contact": {
            "phone": null
        },
        "tags": [
            "featured"
        ],
        "warranty_months": 24
    },
    "patch_json": "{\"display\":{\"color\":\"blue\"},\"contact\":{\"phone\":null},\"tags\":[\"featured\"],\"warranty_months\":24}",
    "after_patch": {
        "_id": "CARD",
        "tags": [
            "featured"
        ],
        "title": "Панель товара",
        "contact": {
            "email": "shop@example.test"
        },
        "display": {
            "color": "blue",
            "width": 200
        },
        "warranty_months": 24
    },
    "after_set_null": {
        "_id": "CARD",
        "tags": [
            "featured"
        ],
        "title": "Панель товара",
        "contact": {
            "email": "shop@example.test",
            "phone": null
        },
        "display": {
            "color": "blue",
            "width": 200
        },
        "warranty_months": 24
    },
    "presence_after_patch": false,
    "presence_after_set": true
}

Полный JSON результата, включая реальные идентификаторы, сохранён рядом в result.json.