问题标签 [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.

0 投票
1 回答
3021 浏览

javascript - 编写依赖于其他键的更复杂的 json 模式

我一直在编写简单的 JSON 模式,但遇到了一个更复杂的 API 输入调用。我有一个可以采用 3 种非常不同类型的 JSON 的宁静结束路线:

本地主机/foo

可以采取:

{“类型”:“冰淇淋”,​​“圆锥”:“华夫饼”...}

或者

{“type”:“hot_dog”,“bun”:“wheat”...}

如果“type”键包含“ice_cream”,我只想看到键“cone”而不是键“bun”。同样,如果“type”包含“hot_dog”,我只想看到“bun”而不是“cone”。我知道我可以进行模式匹配以确保我只看到类型“ice_cream”或类型“hot_dog”,但如果该键设置为该值,我不知道如何强制要求某些其他字段。我看到有一个名为“依赖”的 json 模式字段,但我还没有找到任何关于如何使用它的好例子。

顺便说一句,我不确定这个输入 JSON 是否是好的形式(有效地重载了它所采用的 JSON 结构的类型),但我没有更改 api 的选项。

0 投票
2 回答
394 浏览

json - JSON模式:允许将信息存储在键中

我想为基于 JSON 的协议正式定义一个模式。我对模式有两个标准: 1. 我希望能够使用工具来创建解析器/序列化器(php 和 .net)。2. 结果 JSON 应该易于人类阅读

这是上下文。该模式将描述一个游戏角色,作为一个例子,我将采用配置文件的一个方面 - 职业。一个角色最多可以拥有 2 个职业(从 10 个列表中),每个职业都由一个名称和一个级别来描述,例如:

剥皮 - 200 级 铁匠 - 300 级

为了满足标准#1,使用 XSD 模式(或 JSON 模式)来驱动代码生成器或解析器库确实很有帮助。但这意味着我的 JSON 必须类似于:

但是感觉太啰嗦了,我宁愿让 JSON 看起来像(注意使用职业作为键):

但是后面的 JSON 不能用 XSD 来描述,而不必为每个职业定义一个元素。

因此,我正在寻找适合我情况的解决方案,以下是我确定的选项:

  1. 闭嘴,让 JSON XSD 友好(上面的第一个片段)
  2. 闭嘴,让 JSON 人性化,手动编码解析器/序列化器。

但我真的很想找到一个同时满足这两个标准的解决方案。

注意:我知道 Newton-King 的 JSON 库可以让我将职业解析为字典 - 但它需要我手动编码类型以将此 JSON 映射到。因此,到目前为止,我倾向于选项#2,但我愿意接受建议。

0 投票
1 回答
453 浏览

json - 希望将工作的 jQuery Validator 实现的规则移植到 JSONSchema

我正在尝试将现有(和正在工作的)客户端 jQuery 验证模式移动到 JSONSchema,以允许自己在客户端和服务器上验证任意 JSON。

我的应用程序本质上是一堆巨大的表单,其中包含许多复杂的逻辑,根据用户对其他问题的回答来确定应该问哪些问题。每个表单都有 200 多个字段。

现在我只做客户端验证,大约 99% 的时间都运行良好。浏览器问题已经出现过几次,但都不是灾难性的。话虽如此,我想做服务器端验证(!)。

在阅读了 JSONSchema 草案并浏览了一些 v3 实现之后,似乎我可能会丢失我的应用程序所依赖的一些更复杂的规则。我想确保在向任何方向移动太远之前我没有遗漏任何东西。

一些例子:

“如果 x == 10,则 y 是必需的,否则它是可选的”

10 可以是文字值、枚举等,但我需要能够引用同一结构中的另一个字段并保证它的值不仅存在,而且等同于特定类型/值。

我认为这在 JSONSchema list 上的这个线程中得到了解决

“如果 x = 今天的日期,y = 明天的日期,那么 x > y”

此逻辑将用于确保“开始”日期在“结束”日期之前。

从我所看到的情况来看,没有这样的事情,我能看到的唯一方法是将一个新的评估过的 JSON 块作为模式传递。

我发现最能满足上述需求的是CERNY

如果我叫错了树,请告诉我。我还研究了在客户端和服务器上运行的backbone.js。

tl;博士;

我想为大型复杂表单维护一组验证规则,并将这些验证规则应用于客户端和服务器端的任意 JSON 文档。

0 投票
8 回答
88995 浏览

.net - 从 JSON Schema 生成 C# 类

我正在创建一个以 JSON 格式返回大量数据的 C# WCF Web 服务。客户端是一个 iPad 应用程序,目前正在由另一个团队开发,所以我正在制定规范,没有示例数据。
目前 JSON 字符串是由 .net 框架创建的,我的 Web 服务正在返回一个 C# 对象,其中包含所有信息,然后框架使用 DataContracts 对其进行序列化。

我的问题是通信规范只包含 JSON Schema 文件(基于http://json-schema.org/)。为了方便开发,我想在 C# 中生成相应的类,但由于文件包含大量信息并且有十几个文件,我真的不想手动创建这些类。

所以我正在寻找一种可以让我使用的工具:

  • 从 JSON 模式生成 C# 类。
  • 将 JSON 架构转换为 XSD 文件。然后创建类会很容易,因为有很多工具可以从 XSD 生成类。

我找到了很多工具来针对 JSON Schema 验证 JSON 字符串或从 JSON 字符串生成类,但似乎对我没有任何帮助。
JSON.NET,但它似乎是一个库而不是工具,我没有找到任何关于使用它生成类的信息。

因此,如果有人知道工具或对如何生成这些类有想法(我尝试了一个在 Java 中创建类的工具,但我无法使其工作)。

0 投票
3 回答
18655 浏览

json.net - 如何在 Json.NET 中使用 JSON Schema 'default' 属性?

如果我有一个为属性指定默认值的 JSON 模式,例如

...和一个 JSON 字符串,如

...我如何反序列化该 JSON 字符串,以便将bar其设置为“某些文本”(默认值)而不是 null?

0 投票
12 回答
289147 浏览

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

我们有这个 json 模式草稿。我想获取我的 JSON 数据样本并为 JSON 模式生成一个骨架,我可以手动修改它,添加描述、必需等内容,这些内容无法从具体示例中推断出来。

例如,从我的输入example.json

我会运行我的 json_schema_g​​enerator 工具并得到:

此示例已手动编码,因此可能存在错误。是否有任何工具可以帮助我转换 JSON -> JSON 模式?

0 投票
5 回答
29063 浏览

java - 是否有通过 Java 从 XML 模式生成 JSON 模式的工具?

有没有人知道我们可以从 XML 模式生成 JSON 模式或通过 Java 从 JSON 模式生成 XML 模式的工具或方法?

0 投票
1 回答
662 浏览

java - 如何设置 Json 模式的类型?

我有一个 Json Schema(如下所示),它是由 Jackson 通过代表 Json 类创建的。

但我希望startDateand的类型endDate是字符串而不是数字或整数。有没有办法实现它?

谢谢。

0 投票
1 回答
2047 浏览

json - 这是 XSD 的正确 JSONSchema/Json 吗?

目标是将 XSD 模式转换为 JSON 模式。我首先尝试将 XSD 转换为 JSON,然后看看我是否可以将 JSON 修复为 JSON Schema。所有这些过程都是因为现在我不知道将 XSD 转换为 JSON Schema 的直接方法。现在考虑以下片段。我有以下 XSD 片段

我得到的相应JSON是

所以我的问题是

  1. 这是正确的吗 ?
  2. 我是否应该将属性引用覆盖为 $ref 而不是 @ref (但这会使反序列化变得困难)
  3. 这是否符合 JSONSchema 规范。

该规范可以在http://json-schema.org/找到

我使用 c# 和 Json.net 来实现这一点。

0 投票
1 回答
624 浏览

java - 从 XSD 转换为 JAVA 类时维护目录层次结构?

我有一组 XSD 架构,它们存在于目录结构中。我正在使用 JAXB 将其转换为 Java Classes 。现在,当转换它时,它会将模式分成几个类并将它们放入默认包中。我可以覆盖默认包,但我想保持与 XSD 相同的目录结构。 XSD 架构 这是否意味着我必须手动一次转换每个 XSD。此外,由于它将单个 XSD 分解为多个类,因此我很难将这些类转换为 JSON 模式。所以理想情况下,我希望每个 XSD 都转换为一个类。所以,我会用更简单的话来表达我的问题

  1. 我如何维护目录结构?

  2. 如何确保每个 XSD 对应一个 java 类?

  3. 由于我的最终目标是将 xsd 转换为 JSON Schema,我做错了吗?

  4. 我应该采取不同的方法,例如将 XSD 转换为 JSON,然后可能将其操作为 JSON Schema 吗?