使用(raw_decode)

时间:2016-08-12 12:56:01

标签: python json object decode

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字典。

请提出任何建议:)

1 个答案:

答案 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()