jsonschema validate by keys with different name or type












1















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.










share|improve this question

























  • 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
















1















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.










share|improve this question

























  • 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














1












1








1








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.










share|improve this question
















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






share|improve this question















share|improve this question













share|improve this question




share|improve this question








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



















  • 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












1 Answer
1






active

oldest

votes


















1














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.






share|improve this answer























    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
    });


    }
    });














    draft saved

    draft discarded


















    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









    1














    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.






    share|improve this answer




























      1














      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.






      share|improve this answer


























        1












        1








        1







        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.






        share|improve this answer













        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.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Jan 3 at 9:14









        RelequestualRelequestual

        3,44263366




        3,44263366
































            draft saved

            draft discarded




















































            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.




            draft saved


            draft discarded














            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





















































            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







            Popular posts from this blog

            Monofisismo

            Angular Downloading a file using contenturl with Basic Authentication

            Olmecas