我最近必须完成导出,然后重新导入我所有的 Kissmetrics 数据,以消除由于不正确的别名导致的一些错误事件。我构建了一个 python 程序来生成一个新的 JSON 文件(通过从原始 JSON 文件中删除一些行)。保留在文件中的行的内容都没有被更改。
我设置了一个数据集成以将我的新 JSON 文件上传回 Kissmetrics 系统,并收到错误“A JSON 文本必须至少包含两个八位字节!”。
{"_n": "visited site", "url": "foo.com", "_t": 1399796233, "referrer": "https://www.google.co.in/", "_p": "ziecbw+mnecncwk9x1edoda9+qc="}
{"_n": "search engine hit", "_t": 1399796234, "search terms": "not provided", "_p": "ziecbw+mnecncwk9x1edoda9+qc=", "search engine": "Google"}
{"_t": 1399795555, "page_viewed_in_category": "bar", "_p": "jen/1vdw9ufyh8kpihtymvrjbj4="}
该文件长达数十万行。我认为错误一定是我生成 JSON 的方式,所以我尝试对数据进行二进制搜索以找到有问题的行。我尝试将数据分成两部分并上传一半文件。该理论最终帮助我找到产生错误的行。奇怪的是,一旦我将文件分割了足够多的时间,以前产生错误的文件就不会让它的任何一半产生错误。
例子:
文件 1 - 1000 JSON 行并在上传到 KM 时产生错误
然后,我将文件 1 拆分为 2 个文件,每个文件包含 500 行,即文件 2A 和 2B。
文件 2A - 500 行并且不产生错误 文件 2B - 500 行并且产生错误
这似乎与数据中存在错误的 JSON 行的理论一致。但是当我们将文件 2B 拆分为两个文件,即文件 3A 和文件 3B 时,情况会变得很奇怪。
文件 3A - 250 行并且不产生错误 文件 3B - 250 行并且不产生错误
所以看起来(并且已经被 Kissmetrics 支持确认)错误不在 JSON 本身的实际内容中,而是在解析器读取我的文件的方式中。
Kissmetrics 建议我使用 JSON.dumps 在普通的 .write 方法中写入文件,因为他们的理论是我生成的 JSON 文件在文件生成方式中存在某种伪影。我改用 JSON.dumps 来输出 JSON 文件——同样的错误。
我正在编写的文件绝对是所有有效的 JSON - 我可以将它扫描回 Python 并运行它没有问题。
关于如何修复文件的任何想法?