jsonschema validate by keys with different name or type
I am a in a transition from this type of jsons:
{
"id": 1,
"data": {
"item_number": "4",
...
}
}
to
{
"id": 1,
"data": {
"itemNumbers": [4],
...
}
}
and I would need a jsonschema that matched both of these jsons.
And here this is:
{
"properties": {
"id": {
"enum": [
1
]
},
"data": {
"anyOf": [
{
"properties": {
"item_number": {
"enum": [
"4"
]
}
}
},
{
"properties": {
"itemNumbers": {
"contains": {
"enum": [
4
]
}
}
}
}
]
}
},
"required": [
"id"
]
}
Using python jsonschema package, it matches all jsons regardless of item number.
Any help is appreciated.
python json jsonschema json-schema-validator python-jsonschema
add a comment |
I am a in a transition from this type of jsons:
{
"id": 1,
"data": {
"item_number": "4",
...
}
}
to
{
"id": 1,
"data": {
"itemNumbers": [4],
...
}
}
and I would need a jsonschema that matched both of these jsons.
And here this is:
{
"properties": {
"id": {
"enum": [
1
]
},
"data": {
"anyOf": [
{
"properties": {
"item_number": {
"enum": [
"4"
]
}
}
},
{
"properties": {
"itemNumbers": {
"contains": {
"enum": [
4
]
}
}
}
}
]
}
},
"required": [
"id"
]
}
Using python jsonschema package, it matches all jsons regardless of item number.
Any help is appreciated.
python json jsonschema json-schema-validator python-jsonschema
What's the'enum': ['4']
about? Are you checking for just a single value, or is this an example?
– gregsdennis
Jan 3 at 5:03
yes it is single value (referring you to first json)
– Amir
Jan 3 at 20:22
One other thing I learned when I was researching for this issue is that python package jsonschema 2.6.0 does not support contain: github.com/Julian/jsonschema/issues/512
– Amir
Jan 3 at 20:25
add a comment |
I am a in a transition from this type of jsons:
{
"id": 1,
"data": {
"item_number": "4",
...
}
}
to
{
"id": 1,
"data": {
"itemNumbers": [4],
...
}
}
and I would need a jsonschema that matched both of these jsons.
And here this is:
{
"properties": {
"id": {
"enum": [
1
]
},
"data": {
"anyOf": [
{
"properties": {
"item_number": {
"enum": [
"4"
]
}
}
},
{
"properties": {
"itemNumbers": {
"contains": {
"enum": [
4
]
}
}
}
}
]
}
},
"required": [
"id"
]
}
Using python jsonschema package, it matches all jsons regardless of item number.
Any help is appreciated.
python json jsonschema json-schema-validator python-jsonschema
I am a in a transition from this type of jsons:
{
"id": 1,
"data": {
"item_number": "4",
...
}
}
to
{
"id": 1,
"data": {
"itemNumbers": [4],
...
}
}
and I would need a jsonschema that matched both of these jsons.
And here this is:
{
"properties": {
"id": {
"enum": [
1
]
},
"data": {
"anyOf": [
{
"properties": {
"item_number": {
"enum": [
"4"
]
}
}
},
{
"properties": {
"itemNumbers": {
"contains": {
"enum": [
4
]
}
}
}
}
]
}
},
"required": [
"id"
]
}
Using python jsonschema package, it matches all jsons regardless of item number.
Any help is appreciated.
python json jsonschema json-schema-validator python-jsonschema
python json jsonschema json-schema-validator python-jsonschema
edited Jan 3 at 9:16
Relequestual
3,44263366
3,44263366
asked Jan 2 at 23:50
AmirAmir
1,93763150
1,93763150
What's the'enum': ['4']
about? Are you checking for just a single value, or is this an example?
– gregsdennis
Jan 3 at 5:03
yes it is single value (referring you to first json)
– Amir
Jan 3 at 20:22
One other thing I learned when I was researching for this issue is that python package jsonschema 2.6.0 does not support contain: github.com/Julian/jsonschema/issues/512
– Amir
Jan 3 at 20:25
add a comment |
What's the'enum': ['4']
about? Are you checking for just a single value, or is this an example?
– gregsdennis
Jan 3 at 5:03
yes it is single value (referring you to first json)
– Amir
Jan 3 at 20:22
One other thing I learned when I was researching for this issue is that python package jsonschema 2.6.0 does not support contain: github.com/Julian/jsonschema/issues/512
– Amir
Jan 3 at 20:25
What's the
'enum': ['4']
about? Are you checking for just a single value, or is this an example?– gregsdennis
Jan 3 at 5:03
What's the
'enum': ['4']
about? Are you checking for just a single value, or is this an example?– gregsdennis
Jan 3 at 5:03
yes it is single value (referring you to first json)
– Amir
Jan 3 at 20:22
yes it is single value (referring you to first json)
– Amir
Jan 3 at 20:22
One other thing I learned when I was researching for this issue is that python package jsonschema 2.6.0 does not support contain: github.com/Julian/jsonschema/issues/512
– Amir
Jan 3 at 20:25
One other thing I learned when I was researching for this issue is that python package jsonschema 2.6.0 does not support contain: github.com/Julian/jsonschema/issues/512
– Amir
Jan 3 at 20:25
add a comment |
1 Answer
1
active
oldest
votes
You'll want to modify your anyOf
to oneOf
(This won't change anything with your current schema, but makes the intent clearer) and add additionalProperties: false
to each of the subschemas.
With your schema, "item_number": "4"
fails validation for anyOf[0], but passes for anyOf[1], because there's no constraint for item_number
or properties not defined.
additionalProperties: false
means that any property not included as a key in properties
will cause validation to fail.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54014675%2fjsonschema-validate-by-keys-with-different-name-or-type%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You'll want to modify your anyOf
to oneOf
(This won't change anything with your current schema, but makes the intent clearer) and add additionalProperties: false
to each of the subschemas.
With your schema, "item_number": "4"
fails validation for anyOf[0], but passes for anyOf[1], because there's no constraint for item_number
or properties not defined.
additionalProperties: false
means that any property not included as a key in properties
will cause validation to fail.
add a comment |
You'll want to modify your anyOf
to oneOf
(This won't change anything with your current schema, but makes the intent clearer) and add additionalProperties: false
to each of the subschemas.
With your schema, "item_number": "4"
fails validation for anyOf[0], but passes for anyOf[1], because there's no constraint for item_number
or properties not defined.
additionalProperties: false
means that any property not included as a key in properties
will cause validation to fail.
add a comment |
You'll want to modify your anyOf
to oneOf
(This won't change anything with your current schema, but makes the intent clearer) and add additionalProperties: false
to each of the subschemas.
With your schema, "item_number": "4"
fails validation for anyOf[0], but passes for anyOf[1], because there's no constraint for item_number
or properties not defined.
additionalProperties: false
means that any property not included as a key in properties
will cause validation to fail.
You'll want to modify your anyOf
to oneOf
(This won't change anything with your current schema, but makes the intent clearer) and add additionalProperties: false
to each of the subschemas.
With your schema, "item_number": "4"
fails validation for anyOf[0], but passes for anyOf[1], because there's no constraint for item_number
or properties not defined.
additionalProperties: false
means that any property not included as a key in properties
will cause validation to fail.
answered Jan 3 at 9:14
RelequestualRelequestual
3,44263366
3,44263366
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54014675%2fjsonschema-validate-by-keys-with-different-name-or-type%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
What's the
'enum': ['4']
about? Are you checking for just a single value, or is this an example?– gregsdennis
Jan 3 at 5:03
yes it is single value (referring you to first json)
– Amir
Jan 3 at 20:22
One other thing I learned when I was researching for this issue is that python package jsonschema 2.6.0 does not support contain: github.com/Julian/jsonschema/issues/512
– Amir
Jan 3 at 20:25