Доступ к определениям по свойству ref с помощью newtonsoft.json.schema - PullRequest
0 голосов
/ 13 февраля 2019

Я хочу получить доступ к определениям в схеме, чтобы получить наименование определения.Я использую newtonsoft.json v11.01

Я создаю ac # конвертер для jsonschema, чтобы создать синтаксис и скомпилировать его, чтобы получить типизированную версию объекта во время выполнения.

{
  "$id": "https://example.com/arrays.schema.json",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "xml remarks",
  "type": "object",
  "properties": {
    "fruits": {
      "type": "array",
      "items": {
        "type": "object",
        "title": "fruit",
        "required": ["naam"],
        "properties": {
        "naam": {
          "type": "string",
          "description": "The name of the fruit."
        }
        }
      }
    },
    "vegetables": {
      "type": "array",
      "items": { "$ref": "#/definitions/veggie" }
    }
  },
  "definitions": {
    "veggie": {
      "type": "object",
      "required": [ "veggieName", "veggieLike" ],
      "properties": {
        "veggieName": {
          "type": "string",
          "description": "The name of the vegetable."
        },
        "veggieLike": {
          "type": "boolean",
          "description": "Do I like this vegetable?"
        }
      }
    }
  }
}

в схеме создается ссылка с именем veggie.Это используется в свойстве овощ со ссылкой.

Схема Json содержит определение корневого объекта, но не содержит его в элементе свойства.В элементе свойства нет ничего идентифицируемого, чтобы указать на правильное определение.

как мне найти правильное определение для свойства?

1 Ответ

0 голосов
/ 14 февраля 2019

Как правило, чтобы разрешить json-pointer ($ ref - это "uri-reference", а часть после # - "json-pointer"), вам необходимо иметь доступ ккорень документа json.

Так что если у вас есть функция, которая получает только аргумент, указывающий на раздел «свойства», то вам нужно дать этой функции второй аргумент, указывающий на кореньdocument.

(становится сложнее, когда вы используете схему, состоящую из более чем одного файла; тогда вам нужен второй аргумент, который указывает на корни всех документов схемы)

Это одна из наиболее сложных частей написания программного обеспечения, которая интерпретирует файлы json-схемы, особенно если ваш язык / библиотека не имеет встроенной поддержки json-указателей - в этом случае вам придется написать ее самостоятельно.

...