Check if one json value is in the json value from another JSON, for each key












0















With SQL in postgres, I want to know if one JSON is 'IN' another JSON.



For example:



json_1 = {"a": ["123"], "b": ["456", "789"]}
json_2 = {"a": ["123"], "b": ["456"]}


In the above case, json_2["a"] is in json_1["a"] and json_2["b"] is in json_1["b"].



If I would know all the possible keys of the json, I would easily be able to write the above per key. However, the problem is that I don't know how many and which keys are in the JSON. How can I check for every key in the JSON, if json_2 is in json_1?










share|improve this question























  • So json_1/2 can contain any number of keys with any names, and each of those keys will always be an array, and for each array in json_2, you want to check the corresponding key (which may not exist) in json_1, and then see if all the values from the json_2 array are found in the json_1 array in any order?

    – 404
    Nov 27 '18 at 14:45











  • Correct. However, if the key is in json_2, I do know it also will be in json_1. So the 'may not exist' part doesn't hold. However, the value of the key in json_1 could be then.

    – Marjolein
    Nov 27 '18 at 15:16


















0















With SQL in postgres, I want to know if one JSON is 'IN' another JSON.



For example:



json_1 = {"a": ["123"], "b": ["456", "789"]}
json_2 = {"a": ["123"], "b": ["456"]}


In the above case, json_2["a"] is in json_1["a"] and json_2["b"] is in json_1["b"].



If I would know all the possible keys of the json, I would easily be able to write the above per key. However, the problem is that I don't know how many and which keys are in the JSON. How can I check for every key in the JSON, if json_2 is in json_1?










share|improve this question























  • So json_1/2 can contain any number of keys with any names, and each of those keys will always be an array, and for each array in json_2, you want to check the corresponding key (which may not exist) in json_1, and then see if all the values from the json_2 array are found in the json_1 array in any order?

    – 404
    Nov 27 '18 at 14:45











  • Correct. However, if the key is in json_2, I do know it also will be in json_1. So the 'may not exist' part doesn't hold. However, the value of the key in json_1 could be then.

    – Marjolein
    Nov 27 '18 at 15:16
















0












0








0








With SQL in postgres, I want to know if one JSON is 'IN' another JSON.



For example:



json_1 = {"a": ["123"], "b": ["456", "789"]}
json_2 = {"a": ["123"], "b": ["456"]}


In the above case, json_2["a"] is in json_1["a"] and json_2["b"] is in json_1["b"].



If I would know all the possible keys of the json, I would easily be able to write the above per key. However, the problem is that I don't know how many and which keys are in the JSON. How can I check for every key in the JSON, if json_2 is in json_1?










share|improve this question














With SQL in postgres, I want to know if one JSON is 'IN' another JSON.



For example:



json_1 = {"a": ["123"], "b": ["456", "789"]}
json_2 = {"a": ["123"], "b": ["456"]}


In the above case, json_2["a"] is in json_1["a"] and json_2["b"] is in json_1["b"].



If I would know all the possible keys of the json, I would easily be able to write the above per key. However, the problem is that I don't know how many and which keys are in the JSON. How can I check for every key in the JSON, if json_2 is in json_1?







sql json postgresql compare






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 27 '18 at 14:32









MarjoleinMarjolein

436




436













  • So json_1/2 can contain any number of keys with any names, and each of those keys will always be an array, and for each array in json_2, you want to check the corresponding key (which may not exist) in json_1, and then see if all the values from the json_2 array are found in the json_1 array in any order?

    – 404
    Nov 27 '18 at 14:45











  • Correct. However, if the key is in json_2, I do know it also will be in json_1. So the 'may not exist' part doesn't hold. However, the value of the key in json_1 could be then.

    – Marjolein
    Nov 27 '18 at 15:16





















  • So json_1/2 can contain any number of keys with any names, and each of those keys will always be an array, and for each array in json_2, you want to check the corresponding key (which may not exist) in json_1, and then see if all the values from the json_2 array are found in the json_1 array in any order?

    – 404
    Nov 27 '18 at 14:45











  • Correct. However, if the key is in json_2, I do know it also will be in json_1. So the 'may not exist' part doesn't hold. However, the value of the key in json_1 could be then.

    – Marjolein
    Nov 27 '18 at 15:16



















So json_1/2 can contain any number of keys with any names, and each of those keys will always be an array, and for each array in json_2, you want to check the corresponding key (which may not exist) in json_1, and then see if all the values from the json_2 array are found in the json_1 array in any order?

– 404
Nov 27 '18 at 14:45





So json_1/2 can contain any number of keys with any names, and each of those keys will always be an array, and for each array in json_2, you want to check the corresponding key (which may not exist) in json_1, and then see if all the values from the json_2 array are found in the json_1 array in any order?

– 404
Nov 27 '18 at 14:45













Correct. However, if the key is in json_2, I do know it also will be in json_1. So the 'may not exist' part doesn't hold. However, the value of the key in json_1 could be then.

– Marjolein
Nov 27 '18 at 15:16







Correct. However, if the key is in json_2, I do know it also will be in json_1. So the 'may not exist' part doesn't hold. However, the value of the key in json_1 could be then.

– Marjolein
Nov 27 '18 at 15:16














1 Answer
1






active

oldest

votes


















0














I'm not sure about what output format you want, but this will create one row per key, with a boolean stating whether the json_2 key's array values are contained within the json_1 key's values.



CREATE TABLE t (json_1 JSONB, json_2 JSONB);
INSERT INTO t
VALUES
('{"a":["123"],"b":["456","789","aaa"],"c":["999"],"d":}',
'{"a":["123"],"b":["789","456"],"c":["123"],"d":["x"]}');




Query #1



SELECT key, value <@ (json_1->key) AS contained
FROM (
SELECT (JSONB_EACH(json_2)).*, json_1
FROM t
) j;


Returns:



| key | contained |
| --- | --------- |
| a | true |
| b | true |
| c | false |
| d | false |




View on DB Fiddle






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%2f53501992%2fcheck-if-one-json-value-is-in-the-json-value-from-another-json-for-each-key%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









    0














    I'm not sure about what output format you want, but this will create one row per key, with a boolean stating whether the json_2 key's array values are contained within the json_1 key's values.



    CREATE TABLE t (json_1 JSONB, json_2 JSONB);
    INSERT INTO t
    VALUES
    ('{"a":["123"],"b":["456","789","aaa"],"c":["999"],"d":}',
    '{"a":["123"],"b":["789","456"],"c":["123"],"d":["x"]}');




    Query #1



    SELECT key, value <@ (json_1->key) AS contained
    FROM (
    SELECT (JSONB_EACH(json_2)).*, json_1
    FROM t
    ) j;


    Returns:



    | key | contained |
    | --- | --------- |
    | a | true |
    | b | true |
    | c | false |
    | d | false |




    View on DB Fiddle






    share|improve this answer




























      0














      I'm not sure about what output format you want, but this will create one row per key, with a boolean stating whether the json_2 key's array values are contained within the json_1 key's values.



      CREATE TABLE t (json_1 JSONB, json_2 JSONB);
      INSERT INTO t
      VALUES
      ('{"a":["123"],"b":["456","789","aaa"],"c":["999"],"d":}',
      '{"a":["123"],"b":["789","456"],"c":["123"],"d":["x"]}');




      Query #1



      SELECT key, value <@ (json_1->key) AS contained
      FROM (
      SELECT (JSONB_EACH(json_2)).*, json_1
      FROM t
      ) j;


      Returns:



      | key | contained |
      | --- | --------- |
      | a | true |
      | b | true |
      | c | false |
      | d | false |




      View on DB Fiddle






      share|improve this answer


























        0












        0








        0







        I'm not sure about what output format you want, but this will create one row per key, with a boolean stating whether the json_2 key's array values are contained within the json_1 key's values.



        CREATE TABLE t (json_1 JSONB, json_2 JSONB);
        INSERT INTO t
        VALUES
        ('{"a":["123"],"b":["456","789","aaa"],"c":["999"],"d":}',
        '{"a":["123"],"b":["789","456"],"c":["123"],"d":["x"]}');




        Query #1



        SELECT key, value <@ (json_1->key) AS contained
        FROM (
        SELECT (JSONB_EACH(json_2)).*, json_1
        FROM t
        ) j;


        Returns:



        | key | contained |
        | --- | --------- |
        | a | true |
        | b | true |
        | c | false |
        | d | false |




        View on DB Fiddle






        share|improve this answer













        I'm not sure about what output format you want, but this will create one row per key, with a boolean stating whether the json_2 key's array values are contained within the json_1 key's values.



        CREATE TABLE t (json_1 JSONB, json_2 JSONB);
        INSERT INTO t
        VALUES
        ('{"a":["123"],"b":["456","789","aaa"],"c":["999"],"d":}',
        '{"a":["123"],"b":["789","456"],"c":["123"],"d":["x"]}');




        Query #1



        SELECT key, value <@ (json_1->key) AS contained
        FROM (
        SELECT (JSONB_EACH(json_2)).*, json_1
        FROM t
        ) j;


        Returns:



        | key | contained |
        | --- | --------- |
        | a | true |
        | b | true |
        | c | false |
        | d | false |




        View on DB Fiddle







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 27 '18 at 15:51









        404404

        3,1401726




        3,1401726
































            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%2f53501992%2fcheck-if-one-json-value-is-in-the-json-value-from-another-json-for-each-key%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

            A CLEAN and SIMPLE way to add appendices to Table of Contents and bookmarks

            Calculate evaluation metrics using cross_val_predict sklearn

            Insert data from modal to MySQL (multiple modal on website)