python文件对象是可以迭代的_Python,迭代地将json/dictionary对象写入文件(一次一个)...

您需要使用JSONEncoder的子类,然后代理build_dict函数from __future__ import (absolute_import, division, print_function,)

# unicode_literals)

import collections

import json

mycollection = [1, 2, 3, 4]

def build_dict(_id):

d = dict()

d['my_' + str(_id)] = _id

return d

class SeqProxy(collections.Sequence):

def __init__(self, func, coll, *args, **kwargs):

super(SeqProxy, *args, **kwargs)

self.func = func

self.coll = coll

def __len__(self):

return len(self.coll)

def __getitem__(self, key):

return self.func(self.coll[key])

class JsonEncoderProxy(json.JSONEncoder):

def default(self, o):

try:

iterable = iter(o)

except TypeError:

pass

else:

return list(iterable)

# Let the base class default method raise the TypeError

return json.JSONEncoder.default(self, o)

jsonencoder = JsonEncoderProxy()

collproxy = SeqProxy(build_dict, mycollection)

for chunk in jsonencoder.iterencode(collproxy):

print(chunk)

输出:

^{pr2}$

要逐块读回它,您需要使用JSONDecoder并传递一个可调用的object_hook。当您调用JSONDecoder.decode(json_string)时,将使用每个新的解码对象(列表中的每个dict)调用这个钩子

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值