【问题标题】:Mongo Insert Error - InvalidDocument - Key names must not contain the NULL byteMongo 插入错误 - InvalidDocument - 键名不能包含 NULL 字节
【发布时间】:2014-08-18 11:09:33
【问题描述】:

尝试插入以下 JSON 文档时:

{
  "Cmd": "Sync",
  "DeviceId": "ApplF4KLR7XXXXXX",
  "DeviceType": "iPad",
  "User": "jackXXXXX",
  "\u0003\u0001j\u0000E\\OK\u00031102699800\u0000\u0001R\u000326\u0000\u0001S\u00030\u0000\u0001WX\u00033\u0000\u0001b\u00032\u0000\u0001\u0000\u0011EF\u00034\u0000\u0001G\u000332768\u0000\u0001\u0001\u0001\u0000\u0000VJM\u000326:4909\u0000\u0001\u0001\u0001\u0001\u0001\u0001": true
}

进入 mongo 集合 - 我收到错误“InvalidDocument - Key names must not contain the NULL byte”。

该结构表示在向 OWA 服务器记录 MS ActiveSync POST 请求时生成的日志行。

问题是:什么是最安全的方法来逃避这个特殊的字符,同时保持新的结构/值尽可能接近原始。

【问题讨论】:

    标签: python mongodb unicode null pymongo


    【解决方案1】:

    问题是最后一个字段键包含很多 unicode 字符(包括空字节\u0000):

    \u0003\u0001j\u0000E\\OK\u00031102699800\u0000\u0001R\u000326\u0000\u0001S\u00030\u0000\u0001WX\u00033\u0000\u0001b\u00032\u0000\u0001\u0000\u0011EF\u00034\u0000\u0001G\u000332768\u0000\u0001\u0001\u0001\u0000\u0000VJM\u000326:4909\u0000\u0001\u0001\u0001\u0001\u0001\u0001
    

    问题是你想在字段键中保留 unicode 吗?如果没有,您可以尝试类似

    .decode('unicode_escape').encode('ascii','ignore'))
    

    取自this answer

    【讨论】:

    • 我改用''.join(k.split('\x00'))(替换NULL)。
    猜你喜欢
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2020-09-21
    • 2020-09-18
    相关资源
    最近更新 更多