
您得到的不是JSON对象,而是一系列单独的JSON对象。
你想做些什么的 还 没有一个JSON对象,但不同的JSON流,它们之间用逗号对象。这将不再是可解析的。*
- JSON规范足够简单,可以手动解析,并且应该很清楚,一个对象后面跟着另一个逗号之间的对象与任何有效的产生都不匹配。
如果您尝试创建JSON数组,则可以这样做。除非存在内存问题,否则显而易见的方法是构建字典列表,然后一次将其全部转储:
output = []for f in files: # ... output.append(data)json.dump(output, outfile)
如果存在内存问题,则可以选择以下几种:
- 对于一个快速和肮脏的解决方案,你可以通过写假的吧
[
,,
和]
手动。(但请注意,即使某些解码器会接受,但在最后一个值之后加上多余的逗号也不是有效的JSON。) - 您可以将循环包装在一个产生每个的生成器函数中
data
,并进行扩展JSONEnprer
以将迭代器转换为数组。(请注意,尽管您可能想编写一种内存效率更高的实现,但实际上是在文档中用作为什么以及如何进行扩展的示例JSONEnprer
。) - 您可以寻找具有某种内置迭代流API的第三方JSON库。
但是,值得考虑您要做什么。也许单独的JSON对象流实际上 是 您要执行的 *** 作的正确文件格式/协议/
API。因为JSON是自定界的,所以实际上没有理由在单独的值之间添加定界符。(它甚至对鲁棒性没有多大帮助,除非您使用不会在整个JSON上直接显示的定界符
,。)例如,您得到的正是JSON-
RPC的含义应该看起来像。如果您只是因为不知道如何解析这样的文件而要求不同的东西,那很容易。例如(为简单起见,使用字符串而不是文件):
i = 0d = json.JSonDeprer()while True: try: obj, i = d.raw_depre(s, i) except ValueError: return yield obj
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)