parse JSON and malipulate its object values

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP












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
























  • 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
























  • 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
















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















share|improve this question













share|improve this question




share|improve this question








edited Jan 10 at 19:08









Rui F Ribeiro

39.6k1479132




39.6k1479132










asked Jan 8 at 16:59









Praveen KumarPraveen Kumar

313




313












  • 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
    Jan 9 at 7:06











  • it says xyz.json : command not found

    – Praveen Kumar
    Jan 9 at 12:53












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

    – Neo Mosaid
    Jan 9 at 16:20











  • It says the same with out copy of $ sign

    – Praveen Kumar
    Jan 9 at 18:20


















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



    );













    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
      Jan 9 at 7:06











    • it says xyz.json : command not found

      – Praveen Kumar
      Jan 9 at 12:53












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

      – Neo Mosaid
      Jan 9 at 16:20











    • It says the same with out copy of $ sign

      – Praveen Kumar
      Jan 9 at 18:20















    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
      Jan 9 at 7:06











    • it says xyz.json : command not found

      – Praveen Kumar
      Jan 9 at 12:53












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

      – Neo Mosaid
      Jan 9 at 16:20











    • It says the same with out copy of $ sign

      – Praveen Kumar
      Jan 9 at 18:20













    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

    9618




    9618







    • 1





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

      – Haxiel
      Jan 9 at 7:06











    • it says xyz.json : command not found

      – Praveen Kumar
      Jan 9 at 12:53












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

      – Neo Mosaid
      Jan 9 at 16:20











    • It says the same with out copy of $ sign

      – Praveen Kumar
      Jan 9 at 18:20












    • 1





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

      – Haxiel
      Jan 9 at 7:06











    • it says xyz.json : command not found

      – Praveen Kumar
      Jan 9 at 12:53












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

      – Neo Mosaid
      Jan 9 at 16:20











    • It says the same with out copy of $ sign

      – Praveen Kumar
      Jan 9 at 18:20







    1




    1





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

    – Haxiel
    Jan 9 at 7:06





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

    – Haxiel
    Jan 9 at 7:06













    it says xyz.json : command not found

    – Praveen Kumar
    Jan 9 at 12:53






    it says xyz.json : command not found

    – Praveen Kumar
    Jan 9 at 12:53














    don't copy the "$" sign before cat

    – Neo Mosaid
    Jan 9 at 16:20





    don't copy the "$" sign before cat

    – Neo Mosaid
    Jan 9 at 16:20













    It says the same with out copy of $ sign

    – Praveen Kumar
    Jan 9 at 18:20





    It says the same with out copy of $ sign

    – Praveen Kumar
    Jan 9 at 18:20













    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 Jan 10 at 12:19

























        answered Jan 9 at 16:51









        Dmitry L.Dmitry L.

        112




        112



























            draft saved

            draft discarded
















































            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

            Peggy Mitchell

            Palaiologos

            The Forum (Inglewood, California)