在Python模块中存储JSON数据的最佳方法

5 投票
1 回答
2881 浏览
提问于 2025-04-19 12:31

我正在开发一个Python模块,这个模块里包含了一个很大的JSON文件,这个文件是它依赖的数据之一。我希望Python用户能够把这个JSON文件当作一个Python变量来导入,而其他编程语言的用户也能直接使用这个JSON文件。

所以,我现在想搞清楚,怎样才能让这个JSON对象变得“可导入”。目前,我的解决方案是在__init__.py文件里:

import json
import os

with open(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'seals.json')) as f:
    seals_data = json.load(f)

这样,Python开发者就可以调用:

from my_module import seals_data

这个方法大致上是可行的,但我觉得这样有点奇怪,我想确认一下有没有更简单的方法来让这个JSON文件可以导入。

1 个回答

2

你的选择可能是将数据以Python结构的形式存储在一个模块中,这样别人可以使用。这种方法的唯一缺点是,任何导入这个模块的代码在使用之前都得等它完成输入输出操作,这样不太理想,尤其是当这个模块被用在不涉及这些数据的地方时。

我建议使用一个类或者函数来“懒加载”这些数据,这样只有在真正需要这些数据的时候才进行输入输出操作。

下面是一个例子:

SEALS_DATA = None
def get_seals_data():
    global SEALS_DATA
    if SEALS_DATA is None:
        SEALS_DATA = json.load(open("%s/seals.json"%(os.path.dirname(__file__))))
    return SEALS_DATA

在他们导入这个模块后,直到第一次调用get_seals_data()之前,他们不会有任何延迟。之后的任何调用都应该已经加载了数据。

撰写回答