【问题标题】:Removing \u0000 from nested JSON object before INSERTing into PostgreSQL在插入到 PostgreSQL 之前从嵌套的 JSON 对象中删除 \u0000
【发布时间】:2020-11-25 04:26:07
【问题描述】:

我正在使用 Python 将 JSON 对象插入到 PostgreSQL 数据库表中。 嵌套的 JSON 是高度嵌套的。 其中一些 JSON 对象中的字符串包括“\u0000”,这是一个非法字符和 UNICODE,必须在插入 PG 之前进行清理。

最快的方法是什么?

【问题讨论】:

    标签: python json postgresql unicode sanitization


    【解决方案1】:

    您能否在调用execute() 时看看这是否适合您?

    >>> a = '\u0000'
    >>> json.dumps(a).replace(r'\u0000', '')
    '""'
    >>> 
    

    r'' 是用于帮助解决引用问题的原始字符串。

    【讨论】:

    • 哇!做到了。万分感谢!我现在要阅读r'' :)
    【解决方案2】:

    这是我想出的。

    def sanitize(obj):
        if isinstance(obj, str):
          return obj.replace('\u0000', '')
        if isinstance(obj, list):
          return [sanitize(item) for item in obj]
        if isinstance(obj, tuple):
          return tuple([sanitize(item) for item in obj])
        if isinstance(obj, dict):
          return {k:sanitize(v) for k,v in obj.items()}
        return obj
    

    我在这里缺少更优雅的解决方案吗?

    【讨论】:

    • 在插入调用execute()期间json.dumps(obj).replace('\u0000', '')怎么样?
    • 谢谢!那是我的第一次尝试。但是 dumps() \ - 转义了这个角色。我认为这是因为 ensure_ascii 的 dumps() 默认值为 True,但将其更改为 False 也无济于事。
    猜你喜欢
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 2020-12-27
    相关资源
    最近更新 更多