\u0000
est le seul point de code Unicode qui n'est pas valide dans une chaîne. Je ne vois pas d'autre moyen que d'assainir la chaîne.
Depuis json
est juste une chaîne dans un format spécifique, vous pouvez utiliser les fonctions de chaîne standard, sans vous soucier de la structure JSON. Un désinfectant en une ligne pour supprimer le point de code serait :
SELECT (regexp_replace(the_string::text, '\\u0000', '', 'g'))::json;
Mais vous pouvez également insérer n'importe quel caractère de votre choix, ce qui serait utile si le point de code zéro est utilisé comme délimiteur.
Notez également la différence subtile entre ce qui est stocké dans la base de données et la façon dont il est présenté à l'utilisateur. Vous pouvez stocker le point de code dans une chaîne JSON, mais vous devez le pré-traiter en un autre caractère avant de traiter la valeur en tant que json
type de données.