2

我有一个应用程序,我需要将 Python 搁置腌制字典文件转换为 JSON 文件。

import ujson, shelve

with open("shelveFile", "r") as sfile:
    shelve_dict=shelve.open(sfile)
    py_dict= dict(shelve_dict)
    with open("jsonfile.json","w") as jsonfile:
        ujson.dump(py_dict, jsonfile)
    with open("jsonfile.json",'r') as readJSONfile:
        ujson.loads(readJSONfile.read())

注意:如果我使用ujson.load(jsonfile2)我会得到一个序列化错误。

我遇到的问题:搁置文件对某些字典键使用 Python 元组数据类型。我可以用来ujson.dump保存为 JSON,但是当我尝试使用ujson.load(jsonfile)键时,它们会被加载为字符串而不是元组。缺少使用字典理解来转换键(不确定确切的语法),是否有一个库可以将搁置文件转换为我可以加载回 Python 字典对象的 JSON 文件?

通过ujson.loads(fileobj.read())方法加载时:

{"('tuplekey1','tuplekey2')": value,}

应该:

{('tuplekey1','tuplekey2'): value,} 

(如果问题不清楚,请不要投票,如果需要,我会尽力澄清......我不经常在这里发布问题。)

4

1 回答 1

2

shelve当您要使用或保存数据时,元组不能用作字典键json。因此,在您的情况下,使用了元组的字符串表示,而不是实际的元组-repr(('tuplekey1', 'tuplekey2'))"('tuplekey1', 'tuplekey2')"

因此,您需要额外的步骤将字符串解析为元组。例如,eval("('tuplekey1', 'tuplekey2')")tuple(val.strip("()' ") for val in a.split(','))。当然,您需要知道(或识别)应该将哪些字符串解析为元组。

这个问题可以避免——数据应该以另一种方式存储——元组的另一种表示或数据的另一种结构。

于 2018-12-19T06:57:25.063 回答