将JSON转换为.ics(Python)

2024-09-28 05:19:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试转换一个JSON文件。我的主管建议使用两个函数convertTo(data)(将JSON转换为字符串)和convertFrom(data)(将字符串转换为JSON;我不确定这个函数的用途)。在

我目前的方法使用了很多重构和多个函数。在

#returns a String
def __convert(data):
    convStr = __convertTo(data)
    convStr = __fields(convStr)
    return convStr

#convert JSON to a String
def __convertTo(data):
    str = "" + data
    return str

#takes string arg (prev converted from JSON) to split it into useful info
def __fields(data)
    #########
    iCalStr = __iCalTemplate(title, dtStart, UID, remType, email)
    return iCalStr

#
def __iCalTemplate(title, dtStart, UID, remType, email):
    icsTempStr = "BEGIN:VEVENT\n
                  DTSTART:" + dtStart + "\nUID:" + UID + "\nDESCRIPTION:" + desc + "\nSUMMARY:" + title
    if remType is not None
        icsTempStr += "\nBEGIN:VALARM\nACTION:" + remType + "DESCRIPTION:This is an event reminder"
        if remType is email
            icsTempStr += "\nSUMMARY:Alarm notification\nATTENDEE:mailto:" + email
        icsTempStr += "\nEND:VALARM"
return icsTempStr

任何提示或建议都会很有帮助。我完全知道这个代码需要大量的工作。在


Tags: 函数jsonuiddatareturntitleisemail
2条回答

我最终用了一种完全不同的、更有效的方法来完成这一任务。总之,我的方法遍历JSON,从每个字段中提取每个值,并手动将其放在iCalendar模板中的适当位置。它返回一个字符串。像这样。。。在

def convert(self, json):
    template = 'BEGIN:VEVENT\n'
    template += 'DTSTART:%s\n' % json['event-start']
    ...
    return template

这不是一个完整的答案,而是一个较长的提示。在

有一个Python习惯用法将非常有助于您构建字符串,尤其是潜在的大型字符串。看一个例子可能比解释要容易得多:

>>> template = 'a value: {a}; b value: {b}'
>>> data = {'a': 'Spam', 'b': 'Eggs'}
>>> template.format(**data)
'a value: Spam; b value: Eggs'

与字符串连接相比,这种习惯用法有许多优点,如果您正确地编写模板,就可以完全消除对函数的需要。例如,可选插入可以给定“”的值。一旦您正确地格式化了iCal模板,就只需要从JSON中检索正确的数据点。。。如果您将模板插入点命名为JSON中的插入点,那么您甚至可以一步完成转换。经过一点计划,你的最终答案可能是简单的:

^{pr2}$

要做一个快速(稍有不同)的解释器示例:

>>> import json
>>> decoder = json.JSONDecoder()
>>> json_example = '{"item_one" : "Spam", "item_two" : "Eggs"}'
>>> template = 'Item 1: {item_one}\nItem 2: {item_two}'
>>> print template.format(**decoder.decode(json_example))
Item 1: Spam
Item 2: Eggs

相关问题 更多 >

    热门问题