Mongo插入错误 - 无效文档 - 键名不能包含NULL字节

0 投票
1 回答
3510 浏览
提问于 2025-04-18 17:39

当我尝试把下面这个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向OWA服务器发送POST请求时生成的一条日志。

我的问题是:有什么安全的方法可以处理这个特殊字符,同时又能尽量保持新结构/值和原来的相似呢?

1 个回答

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'))

这个方法取自于这个回答

撰写回答