我正在尝试获得一系列序列化字典,其中只有一个特定的值更改。
虚构的巨蟒字典名为"obj“
_gen = (value for value in range(5,10))
obj = {'mcu': {'led0': {'duty': _gen}}}应该像这样“起作用”:
>>> json.dumps(obj)
'{"mcu":{"led0":{"duty": 5}}}
>>> json.dumps(obj)
'{"mcu":{"led0":{"duty": 6}}}
>>> json.dumps(obj)
'{"mcu":{"led0":{"duty": 7}}}有什么办法可以把这个存档吗?
这样做也是可以的:
_placeholder = <some trick to create a placeholder>
obj = {'mcu': {'led0': {'duty': _placeholder}}}应该像这样“工作”吗?
>>> <placeholder modification trick> = 5
>>> json.dumps(obj)
'{"mcu":{"led0":{"duty": 5}}}
>>> <placeholder modification trick> = 6
>>> json.dumps(obj)
'{"mcu":{"led0":{"duty": 6}}}
>>> <placeholder modification trick> = 7
>>> json.dumps(obj)
'{"mcu":{"led0":{"duty": 7}}}发布于 2014-11-19 22:52:24
事实上,这是最好的答案。尽管我对回答自己的问题感觉不太好。
import json
import types
_gen = (value for value in range(5, 10))
property = {'mcu':{'led0':{'duty': _gen}}}
def generator_handler(obj):
if isinstance(obj, types.GeneratorType):
return obj.next()
else:
return None
print json.dumps(property, default=generator_handler)
print json.dumps(property, default=generator_handler)
print json.dumps(property, default=generator_handler)发布于 2014-11-19 22:23:22
import json
_gen = ({'mcu': {'led0': {'duty': value}}} for value in range(5, 10))
for obj in _gen:
print json.dumps(obj)运行收益率:
$ python gen.py
{"mcu": {"led0": {"duty": 5}}}
{"mcu": {"led0": {"duty": 6}}}
{"mcu": {"led0": {"duty": 7}}}
{"mcu": {"led0": {"duty": 8}}}
{"mcu": {"led0": {"duty": 9}}}可以将生成器表达式封装在一个函数中:
import json
def generate_generator(a, b):
return ({'mcu': {'led0': {'duty': value}}} for value in range(a, b))
for obj in generate_generator(2, 7):
print json.dumps(obj)发布于 2014-11-19 22:28:21
这里有一个解决方案
导入json
class Gen(object):
def __init__(self):
self.x = 1
def next(self):
self.x+=1
return self.x
class Gencoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, Gen):
return obj.next()
return json.JSONEncoder.default(self, obj)
_gen = Gen()
print json.dumps({'mcu': {'led0': {'duty': _gen}}}, cls=Gencoder)
print json.dumps({'mcu': {'led0': {'duty': _gen}}}, cls=Gencoder)
print json.dumps({'mcu': {'led0': {'duty': _gen}}}, cls=Gencoder)
print json.dumps({'mcu': {'led0': {'duty': _gen}}}, cls=Gencoder)您可以在CodeBunk http://codebunk.com/b/49813922/上运行代码。
https://stackoverflow.com/questions/27028129
复制相似问题