Skip to main content

向 JSON 文件添加导入功能

项目描述

ImportsInJSON

黑色的 GitHub 许可证 PyPi 版本 PyPi 下载

Python JSON 导入库


ImportsInJSON 是一种允许 Python 加载从其他 JSON 文件导入数据的 JSON 文件的简单方法。这对于将大型 JSON 文件拆分为仍然可以组合的较小块非常有帮助。

安装

ImportsInJSON 需要 Python 3.7+。

pip install importsinjson

如果您想支持加载带有注释的 JSON 文件,请在安装时添加commentjsonpyjson5附加。

pip install importsinjson[commentjson]
# or
pip install importsinjson[pyjson5]

用法

在您的 Python 代码中,import importsinjsonjson模块的直接替换。

在您的 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此外,如果找不到指定的键/索引,则会引发 , 等KeyErrorIndexError如果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.tar.gz (5.9 kB 查看哈希)

已上传 source

内置分布

importinjson-0.1.0-py3-none-any.whl (5.5 kB 查看哈希

已上传 py3