parse JSON and malipulate its object values












3















I have a json file named xyz.json as follows



[
{
"annotations": [ "a" , "b" , "c" ],
"class": "image",
"filename": "vc00_02201.png"
},
{
"annotations": ,
"class": "image",
"filename": "vc00_02202.png"
}
{
"annotations": ,
"class": "image",
"filename": "vc00_02203.png"
},
{
"annotations": ,
"class": "image",
"filename": "vc00_02204.png"
}
]


I need to copy the object "annotations" from "filename": "vc00_02201.png"
to "annotations" of "filename": "vc00_02204.png" within the same xyz.json file using a shell script.
Expected output:



[
{
"annotations": [ "a" , "b" , "c" ],
"class": "image",
"filename": "vc00_02201.png"
},
{
"annotations": ,
"class": "image",
"filename": "vc00_02202.png"
}
{
"annotations": ,
"class": "image",
"filename": "vc00_02203.png"
},
{
"annotations": [ "a" , "b" , "c" ],
"class": "image",
"filename": "vc00_02204.png"
}
]









share|improve this question









New contributor




Praveen Kumar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





















  • Does it have to be shell script? This would certainly be easier in a scripting language with JSON support (all of the major ones, including at least Perl, Python, and Ruby). Also, if it has to be shell, which external utilities can you use? Can you use something like jq ?

    – derobert
    Jan 8 at 18:03











  • yes I can use jq and python script is also fine.

    – Praveen Kumar
    Jan 8 at 18:15


















3















I have a json file named xyz.json as follows



[
{
"annotations": [ "a" , "b" , "c" ],
"class": "image",
"filename": "vc00_02201.png"
},
{
"annotations": ,
"class": "image",
"filename": "vc00_02202.png"
}
{
"annotations": ,
"class": "image",
"filename": "vc00_02203.png"
},
{
"annotations": ,
"class": "image",
"filename": "vc00_02204.png"
}
]


I need to copy the object "annotations" from "filename": "vc00_02201.png"
to "annotations" of "filename": "vc00_02204.png" within the same xyz.json file using a shell script.
Expected output:



[
{
"annotations": [ "a" , "b" , "c" ],
"class": "image",
"filename": "vc00_02201.png"
},
{
"annotations": ,
"class": "image",
"filename": "vc00_02202.png"
}
{
"annotations": ,
"class": "image",
"filename": "vc00_02203.png"
},
{
"annotations": [ "a" , "b" , "c" ],
"class": "image",
"filename": "vc00_02204.png"
}
]









share|improve this question









New contributor




Praveen Kumar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





















  • Does it have to be shell script? This would certainly be easier in a scripting language with JSON support (all of the major ones, including at least Perl, Python, and Ruby). Also, if it has to be shell, which external utilities can you use? Can you use something like jq ?

    – derobert
    Jan 8 at 18:03











  • yes I can use jq and python script is also fine.

    – Praveen Kumar
    Jan 8 at 18:15
















3












3








3


1






I have a json file named xyz.json as follows



[
{
"annotations": [ "a" , "b" , "c" ],
"class": "image",
"filename": "vc00_02201.png"
},
{
"annotations": ,
"class": "image",
"filename": "vc00_02202.png"
}
{
"annotations": ,
"class": "image",
"filename": "vc00_02203.png"
},
{
"annotations": ,
"class": "image",
"filename": "vc00_02204.png"
}
]


I need to copy the object "annotations" from "filename": "vc00_02201.png"
to "annotations" of "filename": "vc00_02204.png" within the same xyz.json file using a shell script.
Expected output:



[
{
"annotations": [ "a" , "b" , "c" ],
"class": "image",
"filename": "vc00_02201.png"
},
{
"annotations": ,
"class": "image",
"filename": "vc00_02202.png"
}
{
"annotations": ,
"class": "image",
"filename": "vc00_02203.png"
},
{
"annotations": [ "a" , "b" , "c" ],
"class": "image",
"filename": "vc00_02204.png"
}
]









share|improve this question









New contributor




Praveen Kumar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












I have a json file named xyz.json as follows



[
{
"annotations": [ "a" , "b" , "c" ],
"class": "image",
"filename": "vc00_02201.png"
},
{
"annotations": ,
"class": "image",
"filename": "vc00_02202.png"
}
{
"annotations": ,
"class": "image",
"filename": "vc00_02203.png"
},
{
"annotations": ,
"class": "image",
"filename": "vc00_02204.png"
}
]


I need to copy the object "annotations" from "filename": "vc00_02201.png"
to "annotations" of "filename": "vc00_02204.png" within the same xyz.json file using a shell script.
Expected output:



[
{
"annotations": [ "a" , "b" , "c" ],
"class": "image",
"filename": "vc00_02201.png"
},
{
"annotations": ,
"class": "image",
"filename": "vc00_02202.png"
}
{
"annotations": ,
"class": "image",
"filename": "vc00_02203.png"
},
{
"annotations": [ "a" , "b" , "c" ],
"class": "image",
"filename": "vc00_02204.png"
}
]






shell-script json jq






share|improve this question









New contributor




Praveen Kumar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




Praveen Kumar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited yesterday









Rui F Ribeiro

39.4k1479131




39.4k1479131






New contributor




Praveen Kumar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked Jan 8 at 16:59









Praveen KumarPraveen Kumar

313




313




New contributor




Praveen Kumar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





Praveen Kumar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






Praveen Kumar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.













  • Does it have to be shell script? This would certainly be easier in a scripting language with JSON support (all of the major ones, including at least Perl, Python, and Ruby). Also, if it has to be shell, which external utilities can you use? Can you use something like jq ?

    – derobert
    Jan 8 at 18:03











  • yes I can use jq and python script is also fine.

    – Praveen Kumar
    Jan 8 at 18:15





















  • Does it have to be shell script? This would certainly be easier in a scripting language with JSON support (all of the major ones, including at least Perl, Python, and Ruby). Also, if it has to be shell, which external utilities can you use? Can you use something like jq ?

    – derobert
    Jan 8 at 18:03











  • yes I can use jq and python script is also fine.

    – Praveen Kumar
    Jan 8 at 18:15



















Does it have to be shell script? This would certainly be easier in a scripting language with JSON support (all of the major ones, including at least Perl, Python, and Ruby). Also, if it has to be shell, which external utilities can you use? Can you use something like jq ?

– derobert
Jan 8 at 18:03





Does it have to be shell script? This would certainly be easier in a scripting language with JSON support (all of the major ones, including at least Perl, Python, and Ruby). Also, if it has to be shell, which external utilities can you use? Can you use something like jq ?

– derobert
Jan 8 at 18:03













yes I can use jq and python script is also fine.

– Praveen Kumar
Jan 8 at 18:15







yes I can use jq and python script is also fine.

– Praveen Kumar
Jan 8 at 18:15












2 Answers
2






active

oldest

votes


















3














$cat xyz.json | jq '.[3].annotations=.[0].annotations'





share|improve this answer



















  • 1





    +1, You can do jq ... xyz.json as well instead of using cat.

    – Haxiel
    2 days ago











  • it says xyz.json : command not found

    – Praveen Kumar
    2 days ago













  • don't copy the "$" sign before cat

    – Neo Mosaid
    2 days ago











  • It says the same with out copy of $ sign

    – Praveen Kumar
    2 days ago



















0














this is also achievable via jtc in one line:



bash $ cat xyz.json | jtc -w'<vc00_02204.png>[-1][annotations]' -eu jtc -w'<vc00_02201.png>[-1][annotations]' xyz.json ; 
[
{
"annotations": [
"a",
"b",
"c"
],
"class": "image",
"filename": "vc00_02201.png"
},
{
"annotations": ,
"class": "image",
"filename": "vc00_02202.png"
},
{
"annotations": ,
"class": "image",
"filename": "vc00_02203.png"
},
{
"annotations": [
"a",
"b",
"c"
],
"class": "image",
"filename": "vc00_02204.png"
}
]
bash $


Of course, it could have been done via referencing direct members of array, like:



bash $ cat xyz.json | jtc -w'[3][annotations]' -eu jtc -w'[0][annotations]' xyz.json ;


but then whole point of cross-referencing by filename would be moot.






share|improve this answer

























    Your Answer








    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "106"
    };
    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: false,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    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
    });


    }
    });






    Praveen Kumar is a new contributor. Be nice, and check out our Code of Conduct.










    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f493284%2fparse-json-and-malipulate-its-object-values%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    3














    $cat xyz.json | jq '.[3].annotations=.[0].annotations'





    share|improve this answer



















    • 1





      +1, You can do jq ... xyz.json as well instead of using cat.

      – Haxiel
      2 days ago











    • it says xyz.json : command not found

      – Praveen Kumar
      2 days ago













    • don't copy the "$" sign before cat

      – Neo Mosaid
      2 days ago











    • It says the same with out copy of $ sign

      – Praveen Kumar
      2 days ago
















    3














    $cat xyz.json | jq '.[3].annotations=.[0].annotations'





    share|improve this answer



















    • 1





      +1, You can do jq ... xyz.json as well instead of using cat.

      – Haxiel
      2 days ago











    • it says xyz.json : command not found

      – Praveen Kumar
      2 days ago













    • don't copy the "$" sign before cat

      – Neo Mosaid
      2 days ago











    • It says the same with out copy of $ sign

      – Praveen Kumar
      2 days ago














    3












    3








    3







    $cat xyz.json | jq '.[3].annotations=.[0].annotations'





    share|improve this answer













    $cat xyz.json | jq '.[3].annotations=.[0].annotations'






    share|improve this answer












    share|improve this answer



    share|improve this answer










    answered Jan 8 at 18:44









    Neo MosaidNeo Mosaid

    6418




    6418








    • 1





      +1, You can do jq ... xyz.json as well instead of using cat.

      – Haxiel
      2 days ago











    • it says xyz.json : command not found

      – Praveen Kumar
      2 days ago













    • don't copy the "$" sign before cat

      – Neo Mosaid
      2 days ago











    • It says the same with out copy of $ sign

      – Praveen Kumar
      2 days ago














    • 1





      +1, You can do jq ... xyz.json as well instead of using cat.

      – Haxiel
      2 days ago











    • it says xyz.json : command not found

      – Praveen Kumar
      2 days ago













    • don't copy the "$" sign before cat

      – Neo Mosaid
      2 days ago











    • It says the same with out copy of $ sign

      – Praveen Kumar
      2 days ago








    1




    1





    +1, You can do jq ... xyz.json as well instead of using cat.

    – Haxiel
    2 days ago





    +1, You can do jq ... xyz.json as well instead of using cat.

    – Haxiel
    2 days ago













    it says xyz.json : command not found

    – Praveen Kumar
    2 days ago







    it says xyz.json : command not found

    – Praveen Kumar
    2 days ago















    don't copy the "$" sign before cat

    – Neo Mosaid
    2 days ago





    don't copy the "$" sign before cat

    – Neo Mosaid
    2 days ago













    It says the same with out copy of $ sign

    – Praveen Kumar
    2 days ago





    It says the same with out copy of $ sign

    – Praveen Kumar
    2 days ago













    0














    this is also achievable via jtc in one line:



    bash $ cat xyz.json | jtc -w'<vc00_02204.png>[-1][annotations]' -eu jtc -w'<vc00_02201.png>[-1][annotations]' xyz.json ; 
    [
    {
    "annotations": [
    "a",
    "b",
    "c"
    ],
    "class": "image",
    "filename": "vc00_02201.png"
    },
    {
    "annotations": ,
    "class": "image",
    "filename": "vc00_02202.png"
    },
    {
    "annotations": ,
    "class": "image",
    "filename": "vc00_02203.png"
    },
    {
    "annotations": [
    "a",
    "b",
    "c"
    ],
    "class": "image",
    "filename": "vc00_02204.png"
    }
    ]
    bash $


    Of course, it could have been done via referencing direct members of array, like:



    bash $ cat xyz.json | jtc -w'[3][annotations]' -eu jtc -w'[0][annotations]' xyz.json ;


    but then whole point of cross-referencing by filename would be moot.






    share|improve this answer






























      0














      this is also achievable via jtc in one line:



      bash $ cat xyz.json | jtc -w'<vc00_02204.png>[-1][annotations]' -eu jtc -w'<vc00_02201.png>[-1][annotations]' xyz.json ; 
      [
      {
      "annotations": [
      "a",
      "b",
      "c"
      ],
      "class": "image",
      "filename": "vc00_02201.png"
      },
      {
      "annotations": ,
      "class": "image",
      "filename": "vc00_02202.png"
      },
      {
      "annotations": ,
      "class": "image",
      "filename": "vc00_02203.png"
      },
      {
      "annotations": [
      "a",
      "b",
      "c"
      ],
      "class": "image",
      "filename": "vc00_02204.png"
      }
      ]
      bash $


      Of course, it could have been done via referencing direct members of array, like:



      bash $ cat xyz.json | jtc -w'[3][annotations]' -eu jtc -w'[0][annotations]' xyz.json ;


      but then whole point of cross-referencing by filename would be moot.






      share|improve this answer




























        0












        0








        0







        this is also achievable via jtc in one line:



        bash $ cat xyz.json | jtc -w'<vc00_02204.png>[-1][annotations]' -eu jtc -w'<vc00_02201.png>[-1][annotations]' xyz.json ; 
        [
        {
        "annotations": [
        "a",
        "b",
        "c"
        ],
        "class": "image",
        "filename": "vc00_02201.png"
        },
        {
        "annotations": ,
        "class": "image",
        "filename": "vc00_02202.png"
        },
        {
        "annotations": ,
        "class": "image",
        "filename": "vc00_02203.png"
        },
        {
        "annotations": [
        "a",
        "b",
        "c"
        ],
        "class": "image",
        "filename": "vc00_02204.png"
        }
        ]
        bash $


        Of course, it could have been done via referencing direct members of array, like:



        bash $ cat xyz.json | jtc -w'[3][annotations]' -eu jtc -w'[0][annotations]' xyz.json ;


        but then whole point of cross-referencing by filename would be moot.






        share|improve this answer















        this is also achievable via jtc in one line:



        bash $ cat xyz.json | jtc -w'<vc00_02204.png>[-1][annotations]' -eu jtc -w'<vc00_02201.png>[-1][annotations]' xyz.json ; 
        [
        {
        "annotations": [
        "a",
        "b",
        "c"
        ],
        "class": "image",
        "filename": "vc00_02201.png"
        },
        {
        "annotations": ,
        "class": "image",
        "filename": "vc00_02202.png"
        },
        {
        "annotations": ,
        "class": "image",
        "filename": "vc00_02203.png"
        },
        {
        "annotations": [
        "a",
        "b",
        "c"
        ],
        "class": "image",
        "filename": "vc00_02204.png"
        }
        ]
        bash $


        Of course, it could have been done via referencing direct members of array, like:



        bash $ cat xyz.json | jtc -w'[3][annotations]' -eu jtc -w'[0][annotations]' xyz.json ;


        but then whole point of cross-referencing by filename would be moot.







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited yesterday

























        answered 2 days ago









        Dmitry L.Dmitry L.

        112




        112






















            Praveen Kumar is a new contributor. Be nice, and check out our Code of Conduct.










            draft saved

            draft discarded


















            Praveen Kumar is a new contributor. Be nice, and check out our Code of Conduct.













            Praveen Kumar is a new contributor. Be nice, and check out our Code of Conduct.












            Praveen Kumar is a new contributor. Be nice, and check out our Code of Conduct.
















            Thanks for contributing an answer to Unix & Linux Stack Exchange!


            • 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%2funix.stackexchange.com%2fquestions%2f493284%2fparse-json-and-malipulate-its-object-values%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

            How to reconfigure Docker Trusted Registry 2.x.x to use CEPH FS mount instead of NFS and other traditional...

            is 'sed' thread safe

            How to make a Squid Proxy server?