我最近不得不完成导出,然后重新导入我所有的Kissmetrics数据,以便删除由于错误的别名导致的一些错误事件。我构建了一个python程序来生成一个新的JSON文件(通过从原始JSON文件中删除一些行)。保留在文件中的行的内容都没有被更改。
我设置了一个数据集成,将我的新JSON文件上传回Kissmetrics系统并收到错误“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并运行它没有任何问题。
关于如何修复文件的任何想法?