Du hast ja nicht geschrieben, dass der CAST den Replace, also den Escape, automatisch macht.
Ich glaube auch nicht, dass ein CAST(igendwas as CLOB(nn)) irgendwas mehr macht, denn von JSON weiß der ja nichts.
Das Hauptproblem bei JSON ist ja, dass man Hochkomma und Anführungsstriche alternativ nehmen kann.
Und wenn ein JSON in ein JSON eingebettet wird, fangen die Probleme an.
Das ist wie das O'Hara-Problem beim SQL.

Das kann sich sogar noch weiter ziehen, da in einem JSON Text ebenso bereits ein Escape enthalten sein kann, also
"Text" : "irgend ein "Text" steht hier"

Bettest du sowas ein, ist auch der "\" zu quoten. Was zu

"Text" : "irgend ein \"Text\" steht hier"

führt. S.O. Die Data-Eigenschaft soll ein JSON-Objekt als Text enthalten.
Aht man sich entschieden, Hochkomma zu verwenden gilt dies ebenso. Am schlimmsten wirds, wenn fleißig gemischt wird.
Gehört das Hochkomma dann zum Text oder zur JSON-Syntax für Konstanten.