parse JSON and malipulate its object values

Clash Royale CLAN TAG#URR8PPP
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
add a comment |
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
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 likejq?
– derobert
Jan 8 at 18:03
yes I can use jq and python script is also fine.
– Praveen Kumar
Jan 8 at 18:15
add a comment |
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
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
shell-script json jq
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 likejq?
– derobert
Jan 8 at 18:03
yes I can use jq and python script is also fine.
– Praveen Kumar
Jan 8 at 18:15
add a comment |
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 likejq?
– 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
add a comment |
2 Answers
2
active
oldest
votes
$cat xyz.json | jq '.[3].annotations=.[0].annotations'
1
+1, You can dojq ... xyz.jsonas well instead of usingcat.
– 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 beforecat
– Neo Mosaid
Jan 9 at 16:20
It says the same with out copy of $ sign
– Praveen Kumar
Jan 9 at 18:20
add a comment |
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.
add a comment |
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
);
);
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%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
$cat xyz.json | jq '.[3].annotations=.[0].annotations'
1
+1, You can dojq ... xyz.jsonas well instead of usingcat.
– 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 beforecat
– Neo Mosaid
Jan 9 at 16:20
It says the same with out copy of $ sign
– Praveen Kumar
Jan 9 at 18:20
add a comment |
$cat xyz.json | jq '.[3].annotations=.[0].annotations'
1
+1, You can dojq ... xyz.jsonas well instead of usingcat.
– 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 beforecat
– Neo Mosaid
Jan 9 at 16:20
It says the same with out copy of $ sign
– Praveen Kumar
Jan 9 at 18:20
add a comment |
$cat xyz.json | jq '.[3].annotations=.[0].annotations'
$cat xyz.json | jq '.[3].annotations=.[0].annotations'
answered Jan 8 at 18:44
Neo MosaidNeo Mosaid
9618
9618
1
+1, You can dojq ... xyz.jsonas well instead of usingcat.
– 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 beforecat
– Neo Mosaid
Jan 9 at 16:20
It says the same with out copy of $ sign
– Praveen Kumar
Jan 9 at 18:20
add a comment |
1
+1, You can dojq ... xyz.jsonas well instead of usingcat.
– 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 beforecat
– 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
add a comment |
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.
add a comment |
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.
add a comment |
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.
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.
edited Jan 10 at 12:19
answered Jan 9 at 16:51
Dmitry L.Dmitry L.
112
112
add a comment |
add a comment |
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.
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%2funix.stackexchange.com%2fquestions%2f493284%2fparse-json-and-malipulate-its-object-values%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
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