向 JSON 文件添加导入功能
项目描述
ImportsInJSON
Python JSON 导入库
ImportsInJSON 是一种允许 Python 加载从其他 JSON 文件导入数据的 JSON 文件的简单方法。这对于将大型 JSON 文件拆分为仍然可以组合的较小块非常有帮助。
安装
ImportsInJSON 需要 Python 3.7+。
pip install importsinjson
如果您想支持加载带有注释的 JSON 文件,请在安装时添加commentjson或
pyjson5附加。
pip install importsinjson[commentjson]
# or
pip install importsinjson[pyjson5]
用法
在您的 Python 代码中,import importsinjson是
json模块的直接替换。
在您的 JSON 文档中,有两种方法可以从其他 JSON 文件中导入数据。
第一种方法是简单地$import使用一个指向另一个文件的字符串值调用一个键。假设您有一个 JSON 文件a.json:
{
"name": "John Doe",
"age": 30,
"$import": "b.json"
}
和
{
"profession": "Engineer"
}
运行importsinjson.load('a.json')将返回以下内容:
{
"name": "John Doe",
"age": 30,
"profession": "Engineer"
}
这确实遵守 Python 的字典合并规则,因此导入的 JSON 文件中的任何键也在原始文档中将替换原始文档中的值。
导入数据的第二种方法是有一个字符串值,该值以要导入的文件开头$import:
并具有路径。从之前修改示例,a.json
将变为
{
"name": "John Doe",
"age": 30,
"profession": "$import:b.json"
}
但是,这将加载以下内容:
{
"name": "John Doe",
"age": 30,
"profession": {
"profession": "Engineer"
}
}
为了防止这样的重复密钥,您可以:在文件路径之后添加另一个,并提供导入文件中密钥的路径以供使用。
{
"name": "John Doe",
"age": 30,
"profession": "$import:b.json:/profession/"
}
此值可以是 JSON 文档中的任何位置,包括列表中:
{
"name": "John Doe",
"age": 30,
"professions": ["$import:b.json", "$import:c.json"]
}
选项
根据所选的 JSON 解析后端,选项会有所不同。但是,对于所有后端,以下选项可用:
strict: 默认为False. 如果, 如果找不到导入的文件路径True,将引发 a 。FileNotFoundError此外,如果找不到指定的键/索引,则会引发 , 等KeyError。IndexError如果False,将保留原始值。
默认
默认的 JSON 解析后端是 Python 标准库json模块。可以使用所有正常选项。
评论JSON
pip install importsinjson[commentjson]
如果安装,commentjson将用作 JSON 解析后端。这是一个纯 Python 实现,它在将 JSON 数据中的注释传递给json模块之前将其剥离。这也支持json模块的所有选项。但是,它不支持多行注释。
PyJSON5
pip install importsinjson[pyjson5]
最后,如果安装,pyjson5将用作 JSON 解析后端。这是一个加载带有注释的 JSON 数据的 Cython 实现。这是最严格的后端,具有非常基本的选项。请参阅此处
使用此功能时,您可能需要显式添加和
encoding="utf-8"功能。loadloads
如果由于某种原因您想更改用于导入数据的前缀,您可以这样设置:
import importsinjson
importsinjson.PREFIX = "$newimportsymbol"
陷阱
使用load函数比函数更受欢迎loads。这是因为有了文件句柄,在查找导入的文件时,文件的路径可以作为额外的搜索目录。
使用load导入的文件路径可以是:
- 绝对
- 相对于父文件
- 相对于当前工作目录
带loads导入的文件路径只能是:
- 绝对
- 相对于当前工作目录
此外,该模块还可以递归工作,因此请确保不要创建无限循环。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
内置分布
importinjson-0.1.0- py3 -none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 8709f705cc9eb1c8502577b5cd0cfc7cdc5221927127d016261a426b5c8b155b |
|
| MD5 | e16c496828bbed01dd5684f338692209 |
|
| 布莱克2-256 | f4742998dd5bdf13f5bca95d5198e59b7d77b4b70cad8f8adff786dc296bd8d1 |