从JSON数据生成JSON模式的工具


177

我们有这个json模式草稿。我想获取我的JSON数据的样本并为JSON模式生成一个框架,该框架可以手动进行修改,添加诸如description,required之类的内容,而这些不能从特定的示例中推断出来。

例如,从我的输入example.json

{
    "foo": "lorem", 
    "bar": "ipsum"
}

我将运行json_schema_g​​enerator工具,并得到:

{ "foo": {
    "type" : "string",
    "required" : true,
    "description" : "unknown"
  },
  "bar": {
    "type" : "string",
    "required" : true,
    "description" : "unknown"
  }
}

此示例已手动编码,因此可能存在错误。有没有什么工具可以帮助我进行JSON转换-> JSON模式?


但是该工具如何知道它不是从字符串到字符串的通用映射?
hmakholm在2011年

1
在提供的示例中,很明显我们有一个字典(python术语),带有键-值对,其中值恰好是字符串。我不知道会描述相同数据的任何其他JSON模式。这只是一个简单的例子:正如JSON模式草稿中所指定的那样,它可能变得更加复杂。
blueFast 2011年

3
因此,您声称“从任意字符串到其他任意字符串的映射”(例如从文件名到内容描述的映射)不能表示为JSON模式吗?就我所知,这可能是正确的,但是在我看来,这会使这种模式变得毫无用处。
hmakholm在2011年

1
嗯,我不确定我们是否正在讨论与该问题有关的事情,但是无论如何。让我们用一个更好的例子:在JSON数据中具有固定键,例如,如果该JSON数据描述了一个人的属性,那绝对有用。代替“ foo”和“ bar”,考虑“ name”和“ surname”。“ name”和“ surname”显然是人员JSON数据的固定属性,因此它们不是任意字符串:它们是人员模式的一部分。这些值当然是任意的,因此它们不是架构的一部分。
blueFast 2011年

3
拥有固定键有时是您想要的,有时却不是。实际上,这就是全部要点:自动化工具无法从单个样本中检测到您想要的选项。
hmakholm在2011年

Answers:


92

您可能正在寻找:

http://www.jsonschema.net

这是一个在线工具,可以根据JSON字符串自动生成JSON模式。而且,您可以轻松地编辑架构。


3
一个方便的起点。但是请注意在此页其他地方标识的jsonschema.net报告的问题,以及在开发工作流中包括要脱机或至少可通过API访问的工具的讨论原因,并允许在以后的示例中更新架构等。另请参见史蒂夫·贝内特(Steve Bennett)的选项列表。
nealmcb

请注意,在初始导入后编辑架构时,此站点将引发意外错误。
Coreus '17

1
崩溃,{"hello": "world","num": 42}但看起来很有希望
DBX12 '18

3
旧站点肯定不够好。JSONSchema.Net现在已被重写。它更加健壮。如果您有任何问题,请在GitHub上进行报告,我将很乐意解决它们:github.com/jackwootton/json-schema
杰克

jsonschema2pojo.org是我已经使用了多年的东西
有人的地方

83

jskemetor-否setup.py
Att Righ

您是否知道其中任何一个是否支持YAML输入?我们可以转换,但仅需增加一个步骤。
DylanYoung,

28

GenSON(PyPI | Github)是一个JSON模式生成器,可以从多个对象生成单个模式。您也可以与其合并架构。它是用Python编写的,并带有CLI工具。

(全部披露:我是作者。)


1
干得好,伙计!我很遗憾在开始研究skinfer之前没有找到这个东西:github.com/scrapinghub/skinfer
Elias Dorneles

1
不是python,而是另一个github.com/snowplow/schema-guru
chuwy

1
大!我对联机模式生成器jsonschema.net感到失望(它无法为大多数对象创建“必需的”属性,没有产生紧凑(单行)属性或省略ID的选项,最重要的是,生成的模式会无法验证用于单模式数组的数据)。期待尝试您的工具。
戴夫

@Dave-我在json schema.net中也面临类似的问题,这个python工具有帮助吗?
Cshah

1
@Cshah:GenSON给我留下了深刻的印象,并为此做了一个补丁。我需要生成比作者不满意的限制性更强的模式,因此我分叉了一个版本,其中包含用于生成模式属性和AdditionalProperties / additionalItems的选项,以便将无法识别的JSON数据标记为需要注意。
戴夫


6

几个月后,我得到的最佳答案是我的简单工具。它是原始的但实用的。

我想要的是与此类似的东西。JSON数据可以为JSON模式提供框架。我尚未实现它,但是应该有可能以现有的JSON模式作为基础,以便现有的JSON模式和JSON数据可以生成更新的JSON模式。如果未提供此类架构作为输入,则采用完全默认值。

这在迭代开发中非常有用:第一次运行该工具时,JSON模式是虚拟的,但是可以根据数据的演变自动进行优化。


2
对@Green Su的建议如何不符合您的需求感到好奇。我认为您正在描述的是一个提供Jumpstarter的实用程序(您的术语是“骨架”)-类似于脚手架代码生成器?
justSteve 2012年

13
基本上,该工具的问题在于它是一个在线工具。我需要它在我的开发环境中本地运行,有时会作为其他任务的一部分自动运行。“在这里复制,粘贴到那里”工具没有帮助。如果它具有REST API,那就足够了。
blueFast 2012年

2
@justSteve:在线工具,除了使用复制粘贴工作流之外,仍然显示有问题(原始问题出现四年后)。我有json对象,该工具会为其生成不正确的架构,但尚未将其简化为最小的测试用例以提交为错误报告。
戴夫


5

generate-schemaNPM | Github)使用一个JSON对象从中生成模式,一个输出是JSON模式,它是用Node.js编写的,并带有一个REPL和ClI工具,用于将文件管道传输到其中。

完全披露:我是作者:)


有什么计划将该模块更新为草案4+?添加最小,最大属性,引用等?感谢工具btw :)将在我的项目中使用它
Alien先生


3

json-schema-generator是一个基于Ruby的简洁JSON模式生成器。它支持JSON模式的草案3和草案4。它可以作为独立的可执行文件运行,也可以嵌入Ruby脚本中。

然后,您可以根据需要使用json-schema针对新生成的架构验证JSON示例。


3

对于支持多个输入的脱机工具,到目前为止,我见过的最好 的工具是https://github.com/wolverdude/GenSON/我想看到一个在标准输入中使用文件名的工具,因为我有成千上万个文件。但是,我用尽了打开的文件描述符,因此请确保文件已关闭。我还希望看到处理递归的JSON模式生成器。我现在正在努力从JSON对象生成Java ,希望从我的Java类转到JSON Schema。如果您好奇或想要确定其中的错误,这是我的GenSON脚本。

#!/bin/sh
ulimit -n 4096
rm x3d*json
cat /dev/null > x3d.json
find ~/Downloads/www.web3d.org/x3d/content/examples -name '*json' -      print| xargs node goodJSON.js | xargs python bin/genson.py -i 2 -s     x3d.json >> x3d.json
split -p '^{' x3d.json x3d.json
python bin/genson.py -i 2 -s x3d.jsonaa -s x3d.jsonab /Users/johncarlson/Downloads/www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter02-GeometryPrimitives/Box.json > x3dmerge.json 

首先,您能否提供对unix.stackexchange.com/questions/211803/…的答案?
戴夫


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.