\u0000
är den enda Unicode-kodpunkten som inte är giltig i en sträng. Jag ser inget annat sätt än att sanera snöret.
Sedan json
är bara en sträng i ett specifikt format, kan du använda standardsträngsfunktionerna utan att behöva oroa dig för JSON-strukturen. En enradsdesinfektion för att ta bort kodpunkten skulle vara:
SELECT (regexp_replace(the_string::text, '\\u0000', '', 'g'))::json;
Men du kan också infoga vilket tecken du vill, vilket skulle vara användbart om nollkodpunkten används som någon form av avgränsare.
Notera också den subtila skillnaden mellan vad som lagras i databasen och hur det presenteras för användaren. Du kan lagra kodpunkten i en JSON-sträng, men du måste förbehandla den till något annat tecken innan du bearbetar värdet som en json
datatyp.