问题标签 [python-jsonschema]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
jsonschema - 在python中验证json模式中的未知属性名称
上面的代码验证了具有非间隔字符串数组项的属性价格。即使我们不知道传入的属性名称,是否可以验证该属性?
可能像下面这样
python - 使用 anyOf 关键字验证 jsonschema 时设置默认值
我想使用在我的架构中定义的默认值。我发现 python-jsonschema 常见问题解答中已经有一个示例:https ://python-jsonschema.readthedocs.io/en/stable/faq/
该示例扩展了property
关键字的默认验证器并根据需要设置默认值。anyOf
但是,一旦在同一架构中使用关键字,我就会遇到问题。
让我给你举个例子:
此示例实际上按预期工作。运行它提供以下输出:
因此,该属性some_property
已正确设置为默认值 1。但是,如果我们现在class_name
将对象内的 更改为another_class
,这适合anyOf
列表中的第二个条目,我们会遇到以下问题:
=>
在迭代anyOf
列表时,给定的实例anyOf
已经被第一个子模式更改。验证器调用每个子模式的anyOf
所有相关验证器,结果第一个子模式的properties
验证器将第一个子模式的默认值插入到当前实例中。当子模式的验证不成功时,也会发生这种情况anyOf
。结果,不适合此示例的第一个子模式插入了属性'some_property': 1
:
所以现在anyOf
到了通常适合对象的第二个子模式,另一个键已添加到实例中,导致验证失败以及additionalProperties
不允许。结果,在其中没有找到有效的模式anyOf
,我们得到了上述错误。
那么如何解决这个问题呢?我的方法是anyOf
在迭代子模式列表时存储实例的值。如果子模式不匹配,则应还原此子模式所做的所有更改。不幸的是,直到现在,我都无法实现这种行为。
作为参考,这是我最近尝试的样子:
在内部这似乎有效,验证也有效。但由于某种原因,现在obj
给出的内容{"my_list": [{"class_name": "another_class"}]}
是:
我不明白为什么。我猜字典在通过验证器时会发生变化,因为它们是可变的。因此,尝试重置实例可能不会在全局上下文中产生预期的效果。但是,我无法弄清楚如何解决这个问题。有人可以帮忙吗?
python - JSON 与 Python:jsonschema 没有预期的验证错误
我已经定义了一个模式并用它来验证 JSON 对象,但我从来没有得到预期的 ValidationError。例如:
谁能看到我做错了什么?
json - JSON 模式:属性值必须等于父键
根据JSON-Schema 7.0 String section,我可以使用 a"relative-json-pointer"
来确保属性值与父键完全匹配。
在Relative JSON Pointers的示例部分(5.1)中,它显示了“上一级”并获取键值, is "0#"
。
给定以下 JSON 文档:
以下 json-schema 应捕获该"invalid"
对象:
我确信 json-schema 是合理的,因为它会在以下 JSON 文档中捕获两个对象"invalid2"
和"invalid3"
:
我已经使用ajv-cli 3.3.0和python jsonschema 3.2.0进行测试。但是两种验证实现都不会捕获该"invalid"
对象。两种实现都声称完全支持 JSON Schema Draft 7。
python - 找不到 jsonschema 的包元数据
我对此很陌生。我安装jsonschema
并importlib_metadata
手动将其复制到我正在synthesis
使用的文件夹中,make syn
即vlsi
在我的情况下的文件夹。
它以这个错误终止:importlib_metadata.PackageNotFoundError: No package metadata was found for jsonschema
我在这里找到了一些解决方案:http: //biercoff.com/how-to-fix-package-not-found-error-importlib-metadata/但是在哪里可以找到 serverless.yml 文件,并且会使slim
true 到 false 影响其他事物?知道什么可能导致此错误吗?
json - 如果条件与使用 JSON 模式草案 7 的相对参考
当我引入条件 if / then 语句时,我想使用 json 模式将相对 JSON 指针引用与 $ref 模式结合起来。
在这种情况下,我想要求:
- 如果 system = Phone 则需要 usePhone 元素
- 如果 system = Email 则需要 useEmail 元素
当我使用模式进行验证时,模式正在生成错误 - 我怀疑if -> $ref / enum代码是问题的原因。json-schema 文档建议在定义的元素内嵌套所需的常量/枚举值,但是当我的元素是 $ref 位置时,我不确定如何执行此操作,例如:
https://json-schema.org/understanding-json-schema/reference/conditionals.html
需要相对模式是因为 ContactPoint 的实例在组合模式中的多个位置使用。
参考:
- https://json-schema.org/understanding-json-schema/reference/conditionals.html
- https://docs.opis.io/json-schema/1.x/pointers.html
- https://docs.opis.io/json-schema/1.x/conditional-subschemas.html
- https://docs.opis.io/json-schema/1.x/ref-keyword.html
- https://docs.opis.io/json-schema/1.x/multiple-subschemas.html
例子:
谢谢!
python - 如何在json文件数组python中添加数据
我想编辑 Json 文件并在 json 文件中添加数据
这是我从 api 响应中获得的 json 文件-
我想以相同的格式将其添加到上述 json 文件的变量部分中 -
我正在使用它来保存 json 文件 -
我需要在此处添加什么代码才能在我的 json 文件中更新所需的 Json 数据?
json - 我需要帮助来构建自己的 json 架构
如何构建自己的 json 模式来验证从 api 返回的 json 是相同的结构?我有这个示例 JSON
有时它可能具有不同的结构,我需要构建自己的 json 模式以在操作 json 数据之前验证它是否相同。如何构建自己的架构以确保它具有有效的结构?
python - 你应该如何用python更新本身就是值的键的JSON值
我有 2 个文件,一个是 test.json,另一个是我的 test.py 我的目标是更新键“test3”的值,而不是等于 3(如下所示),更新和变成10。
这是test.json
这是test.py
运行后,我期望的输出是:
请注意,“test3”值变为 10,但实际上,我的输出变为:
缩进不是问题,而是它没有将“test3”从 5 更改为 10,而是在末尾添加了一个值为 10 的新“test3”键,并使旧键保持不变。我也尝试过要求程序只打印出“test”中任何键的值,但它没有这样做,唯一有效的是打印出“test”本身的值或“test5”前导我相信他们的位置是什么搞砸了。对此的任何解决方案将不胜感激,如果您好奇,我无法将 JSON 文件更改为更整洁的解决方案,因为我正在使用它来处理视频游戏 Minecraft 中的 JSON 文件,我担心会弄乱预先存在的结构会干扰游戏读取文件的设计方式。
json - Jsonschema 验证
我正在研究 Json 模式验证,下面是代码。我需要对元素“pii”进行架构检查。
这些值只能是在列(field1、field2 或 field3)中定义的列,并且所有列名都没有组合。列名和列数是动态的,并且每个 json 都不同。下面的当前 json 示例有 3 个列名,接下来可能会有更多。
- 如何为 pii 添加架构检查?
- 有没有更好的方法来验证 column_names(field1, field2, field3)、column_description 或 column_datatype 中是否有值?
- 我可以将列数据类型限制为一组数据类型值 ['integer','string','object']
谢谢你的时间!