Mongo插入错误 - InvalidDocument - 键名不能包含NULL字节

时间:2014-08-18 11:09:34

标签: python mongodb unicode null pymongo

尝试插入以下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 - 键名不能包含NULL字节”。

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

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

1 个答案:

答案 0 :(得分:0)

问题是包含大量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