\u0000
é o único ponto de código Unicode que não é válido em uma string. Não vejo outra maneira senão higienizar a corda. Desde
json
é apenas uma string em um formato específico, você pode usar as funções de string padrão, sem se preocupar com a estrutura JSON. Um desinfetante de uma linha para remover o ponto de código seria:SELECT (regexp_replace(the_string::text, '\\u0000', '', 'g'))::json;
Mas você também pode inserir qualquer caractere de sua preferência, o que seria útil se o ponto de código zero fosse usado como alguma forma de delimitador.
Observe também a sutil diferença entre o que está armazenado no banco de dados e como ele é apresentado ao usuário. Você pode armazenar o ponto de código em uma string JSON, mas precisa pré-processá-lo para algum outro caractere antes de processar o valor como um
json
tipo de dados.