python中的新功能:)
我想将包含多个对象的长json文件解码为python字典,然后将其处理为数据库。
这是我的代码
file=open('hi.json',encoding='utf-8')
def readin():
return file.read(2048)
def parse():
decoder = json.JSONDecoder(strict=False)
buffer = ''
for chunk in iter(readin, ''):
buffer += chunk
while buffer:
try:
result, index = decoder.raw_decode(buffer)
yield result
buffer = buffer[index:]
except ValueError as e:
print("1",e)
# Not enough data to decode, read more
break
def main():
imputd=parse()
output = open('output.txt', 'w')
output.write(json.dumps(next(imputd)))
main()
它适用于第一个对象。而不是文件(output.txt),我想要一个python字典。
请提出任何建议:)
答案 0 :(得分:0)
正如Rawing所说,你只是从imputd
获取第一个值。你需要迭代它可以返回的整个序列。
def main():
imputd = parse()
objs = list(imputd) # Get them all, not just the first
with open("output.txt", "w") as output:
# Encode the entire list and write it to the output file.
json.dump(objs)
在parse
中,您需要确保在跳过刚刚解析的对象后,buffer
以有效的JSON对象开头。这应该意味着只修剪buffer
中的任何前导空格(假设流每行包含一个对象,以便buffer[index:] == "\n..."
)。
try:
result, index = decoder.raw_decode(buffer)
yield result
buffer = buffer[index:].lstrip()