【问题标题】:Generate JSON Schema from sample JSON data in C# with NJsonSchema使用 NJsonSchema 从 C# 中的示例 JSON 数据生成 JSON Schema
【发布时间】:2016-08-27 14:16:45
【问题描述】:

我希望这不是我的正确做法,但我正在尝试从内存中的 JSON 字符串生成 JSON 模式。

我正在使用 GitHub 上的 NJsonSchema。 https://github.com/NJsonSchema/NJsonSchema/

string json = @"{
  ""a"": 1,
  ""name"": ""Bill Smith"",
  ""isTall"": true
}";

var schemaItem = JsonSchema4.FromJson(json);
string jsonSchema = schemaItem.ToJson();

当我执行上面的代码时,我在 jsonSchema 中得到以下不正确的值。

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "a": 1,
  "name": "Bill Smith",
  "isTall": true
}

为了以防万一,我暂时为它创建了一个 GitHub 错误。 https://github.com/NJsonSchema/NJsonSchema/issues/180

【问题讨论】:

    标签: c# json njsonschema


    【解决方案1】:

    你用错了,JsonSchema4.FromJson(string json)是用来加载已有的schema json,而不是加载任意json并从中生成schema。

    您可能正在寻找的是JsonSchema4.FromType<MyType>(),它可以从一个类型生成一个模式,但您需要为所有内容提供实际类型。

    据我所知,没有任何方法可以仅从 json 生成模式,因此您需要创建一个与您的输入匹配的类。如果您需要,可以查看http://www.newtonsoft.com/jsonschema,尽管它不是免费的解决方案(而且我与它无关)。

    【讨论】:

    • 感谢您的回复。不幸的是,为我的 json 对象创建类型并不是我有机会与我正在使用它的应用程序一起做的事情。我希望完全按照以下方式进行操作:jsonschema.net/#。我有一个用 JSON 表示的对象,我想要关联的 JSON Schema。此外,似乎 JsonSchema4.FromUrl(validUrlWithJson) 也可以按照我的预期工作。它从该 URL 获取 JSON,并似乎从中创建了一个模式。
    • 刚刚查看了 JsonSchema4.FromUrl 的源代码,它所做的只是从 url 获取数据,然后将其传递给 JsonSchema4.FromJson,所以它不会帮助你。恐怕你可能需要自己编写这个代码,虽然它不应该那么难做,因为 json 只有几种类型供你处理(字符串、整数、布尔值,可能是日期)。
    • 是的,谢谢。我希望有什么能帮到我,这样我就不必冒着通过手工构建模式来冒险升级模式的风险。
    【解决方案2】:

    在当前版本的NJsonSchema 中,您可以从示例数据生成 JSON Schema:

    https://github.com/RSuter/NJsonSchema/wiki/SampleJsonSchemaGenerator

    提交:https://github.com/NJsonSchema/NJsonSchema/commit/28d5a1357a9b5a3367154d3bc6e2488769b721aa

    将在 v7.6 版本中提供。

    DataToJsonSchemaGenerator:https://github.com/NJsonSchema/NJsonSchema/blob/master/src/NJsonSchema/Generation/DataToJsonSchemaGenerator.cs

    我认为 JsonSchema4 上还有一个 FromJsonData 方法....

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-20
      • 1970-01-01
      • 2022-01-17
      • 2018-03-27
      • 2018-09-23
      • 1970-01-01
      • 1970-01-01
      • 2015-03-07
      相关资源
      最近更新 更多