Как обеспечить ограничение, что ключи должны быть одним из элементов в некотором пользовательском массиве

Я использую JSON для определения некоторых файлов конфигурации и хочу проверить их с помощью схемы json. Моя проблема в том, что я хочу убедиться, что ключи некоторого объекта должны быть подмножеством элементов массива, определенного в том же JSON: например:

Действительный:

{
      "files": ["file1", "file2"],
      "filelocations": {
           "file1": "/etc/globalconfigs/file1.conf",
           "file2": "/usr/bin/file2.sh"
      }
}

Неверно (другой ключ не находится в files):

{
      "files": ["file1", "file2"],
      "filelocations": {
           "file1": "/etc/globalconfigs/file1.conf",
           "otherkey": "/usr/bin/file2.sh"
      }
}

и т. д. Я хочу убедиться, что ключи filelocations находятся в массиве files. Хотя в этом примере мы можем изменить структуру JSON, комбинируя ключи-значения, чтобы не было необходимости в таком ограничении, в моем случае я не могу изменить JSON таким образом, поэтому хорошо иметь валидацию механизм для этого.

Как я могу этого добиться?


person reader_1000    schedule 17.12.2012    source источник


Ответы (1)


Вы не можете добиться этого с помощью схемы JSON, нет комбинации ключевых слов, которая может гарантировать это.

Если вы предприимчивы (и я даже могу написать это для вас), вы можете использовать мой JSON Schema API и задайте собственное ключевое слово в соответствии с вашими потребностями. Это выполнимо.

person fge    schedule 02.01.2013
comment
Спасибо за ответ. Считаете ли вы, что мое требование является действительной и общей проблемой для людей, которые используют / будут использовать JSON и его схему? Если это так, добавление пользовательского ключевого слова для достижения этой цели может быть хорошей идеей, чтобы спецификация стала более зрелой. В противном случае это может не стоить того, потому что я могу проверить это требование в коде, используя JSON. - person reader_1000; 06.01.2013
comment
Честно говоря, я не думаю, что это очень распространенное требование. Тем более, что здесь можно реорганизовать JSON, чтобы не было необходимости в отдельном массиве с упоминанием ключей. - person fge; 06.01.2013
comment
Я также подумал, что это не может быть общим требованием, и вы правы, я могу реорганизовать JSON, но в текущей форме это намного упрощает работу для меня и для людей, использующих его. Поэтому я продолжу в том же духе и проверю свой код с помощью JSON. Спасибо за вашу помощь. - person reader_1000; 06.01.2013
comment
Вы можете взглянуть на jsonary: он очень эффективно использует гиперсхему. Короче говоря, гиперсхема также может помочь вам создать JSON, и это также прописано в самой схеме. - person fge; 06.01.2013
comment
Спасибо, посмотрю на jsonary, вроде интересно. - person reader_1000; 06.01.2013