如何用Json字符串替换给定的数据结构?

时间:2017-09-04 10:12:32

标签: python json python-2.7

我在Python中有以下代码。它需要一个datimetime dt并检查它是否属于Type1Type2。如果没有触发这些类型,则返回None

self.daytypes = {
    'Type1': (
        date(2015, 3, 12),
        date(2015, 4, 8)
    ),
    'Type2': (
        date(2015, 1, 4),
        date(2015, 3, 9),
        date(2015, 5, 25)
    )
}


def getDayType(self,dt):
    holidays = []
    for d in self.daytypes:
        holidays.extend(self.daytypes[d])

    wd = dt.isoweekday()
    daytype = None 
    for t, ranges in self.daytypes.items():
        for day in ranges:
            if (day == dt.date()):
                daytype = t
                break
        if daytype is not None:
            break
    return daytype

现在我想用Json字符串self.daytypes替换数据结构myJson

{"Type1":["2015-03-12","2015-04-08"],"Type2":["2015-01-04","2015-03-09","2015-05-25"]}

有没有简单的方法可以用最少的代码更新来实现它?

2 个答案:

答案 0 :(得分:1)

您可以使用字典理解从JSON字符串构建数据结构,如下所示:

import json
from datetime import datetime

json_string = '''{"Type1":["2015-03-12","2015-04-08"],"Type2":["2015-01-04","2015-03-09","2015-05-25"]}'''

daytypes = {k: [datetime.strptime(x, '%Y-%m-%d').date() for x in v] for k,v in json.loads(json_string).items()}

>>> daytypes
{'Type1': [datetime.date(2015, 3, 12), datetime.date(2015, 4, 8)], 'Type2': [datetime.date(2015, 1, 4), datetime.date(2015, 3, 9), datetime.date(2015, 5, 25)]}

如果您的字典中必须有元组,那么您可以将列表转换为字典理解中的元组:

daytypes = {k: tuple(datetime.strptime(x, '%Y-%m-%d').date() for x in v) for k,v in json.loads(json_string).items()}
>>> daytypes
{u'Type1': (datetime.date(2015, 3, 12), datetime.date(2015, 4, 8)), u'Type2': (datetime.date(2015, 1, 4), datetime.date(2015, 3, 9), datetime.date(2015, 5, 25))}

答案 1 :(得分:0)

您可以实现序列化功能:

def toJSON(self):
    return json.dumps(self, default=lambda o: o.__dict__, 
        sort_keys=True, indent=4)