JSON'转义序列“ \\&”中的Postgresql无效'

时间:2019-10-18 09:59:03

标签: python json postgresql

我使用Python和pg8000库将HTML和各种文本存储在PostgreSQL的JSON结构中。我发现我经常会收到类似于以下内容的错误:

pg8000.core.ProgrammingError: {'S': 'ERROR', 'V': 'ERROR', 'C': '22P02', 'M': 'invalid input syntax for type json', 'D': 'Escape sequence "\\&" is invalid.', 'W': 'JSON data, line 1: ...Ga,"'"));-1!=a.indexOf("\\&...', 'F': 'json.c', 'L': '951', 'R': 'json_lex_string'}

因此,要剥离这些代码,我有以下极其缓慢的代码,我必须继续在这些代码中添加特定的“无效转义序列”:

    def filter_values(value: Any) -> Any:
        if isinstance(value, list):
            return list(map(filter_values, value))
        if isinstance(value, dict):
            return {k:filter_values(v) for k, v in value}
        if isinstance(value, str):
            stripped = value.strip().replace('\\u0000', '').replace('\u0000', '').replace(u'\u0000', '')
            while '\\-' in stripped:
                stripped = stripped.replace('\\-', '-')
            while '\\+' in stripped:
                stripped = stripped.replace('\\+', '+')
            while '\\E' in stripped:
                stripped = stripped.replace('\\E', 'E')
            while '\\&' in stripped:
                stripped = stripped.replace('\\&', '&')
            return stripped
        return value

如果我不能只剥离所有\,因为那样会破坏json(例如\")。必须有一个更好的方法来做到这一点。正确转义JSON Postgresql Blob中的字符有哪些规则?

0 个答案:

没有答案