2016-01-24 3 views
3

Есть ли способ выразить ссылку на другой элемент в том же документе JSON, используя схему JSON? Название может быть немного запутанным, но я не ищу атрибут "$ref", который ссылается на другой тип, но мне любопытно, если есть способ, ссылаться на другой элемент документа, используя указанное поле. Я знаю, что это возможно для принудительного использования xsd для XML-документов, а не для JSON.Ссылка на схему JSON другой элемент в документе

Я хочу сделать что-то вроде этого:

{ 
    "people": [ 
    { "id": "1", "name": "A" }, 
    { "id": "2", "name": "B" }, 
    { "id": "3", "name": "C" } 
    ], 
    "chosenOne": "1" // I want the schema to enforce a person ID here 
} 

Я смотрел на определение схемы v4: http://json-schema.org/draft-04/schema, но не нашел ничего, что выглядит как то, что я пытаюсь сделать. Я просто пропустил это?

ответ

2

Что вы хотите, так это то, что вы описываете ссылку ($ ref) в объекте, который описывает ваша схема.

вроде как это

{ 
    "people": [] 
    "chosenOne": { $ref: "#1"} 
} 

(или, может быть указателем, если вы хотите, чтобы значение Id (http://json-spec.readthedocs.org/en/latest/pointer.html)

Я знаю, что если не прямой путь, чтобы сделать это, но вы можете быть в состоянии использовать шаблон или oneof свойства, чтобы заставить его быть правильное значение. вроде как это

"properties": { 
    "chosenOne" 
     "type": "string", 
     "oneOf": ["1","2","3"] 
     ] 
    }, 
} 

Simmilarly можно заставить значение свойства быть справочник . Тем не менее, поскольку нет ссылочного типа значения (http://www.tutorialspoint.com/json/json_data_types.htm) только номер или строка, вы не можете гарантировать значение значения. Вы можете просто гарантировать, что если будет следовать какой-то эталонный шаблон.

Если вам нужно больше, чем может дать вам схема json, вы можете посмотреть, например, в odata. В OData есть некоторые дополнительные вещи, поэтому вы можете описать объект entitySet и затем определить свойство навигации для этого набора. Это заставляет вас следить за структурой odata, поэтому вы не свободны, как и обычная json-схема.

+1

Это очень странно и странно в то же время. Благодаря :) –

Смежные вопросы