parse JSON and malipulate its object values
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
New contributor
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
New contributor
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
New contributor
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
New contributor
New contributor
edited yesterday
Rui F Ribeiro
39.4k1479131
39.4k1479131
New contributor
asked Jan 8 at 16:59
Praveen KumarPraveen Kumar
313
313
New contributor
New contributor
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.json
as well instead of usingcat
.
– Haxiel
2 days ago
it says xyz.json : command not found
– Praveen Kumar
2 days ago
don't copy the "$" sign beforecat
– Neo Mosaid
2 days ago
It says the same with out copy of $ sign
– Praveen Kumar
2 days ago
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
});
}
});
Praveen Kumar is a new contributor. Be nice, and check out our Code of Conduct.
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.json
as well instead of usingcat
.
– Haxiel
2 days ago
it says xyz.json : command not found
– Praveen Kumar
2 days ago
don't copy the "$" sign beforecat
– Neo Mosaid
2 days ago
It says the same with out copy of $ sign
– Praveen Kumar
2 days ago
add a comment |
$cat xyz.json | jq '.[3].annotations=.[0].annotations'
1
+1, You can dojq ... xyz.json
as well instead of usingcat
.
– Haxiel
2 days ago
it says xyz.json : command not found
– Praveen Kumar
2 days ago
don't copy the "$" sign beforecat
– Neo Mosaid
2 days ago
It says the same with out copy of $ sign
– Praveen Kumar
2 days ago
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
6418
6418
1
+1, You can dojq ... xyz.json
as well instead of usingcat
.
– Haxiel
2 days ago
it says xyz.json : command not found
– Praveen Kumar
2 days ago
don't copy the "$" sign beforecat
– Neo Mosaid
2 days ago
It says the same with out copy of $ sign
– Praveen Kumar
2 days ago
add a comment |
1
+1, You can dojq ... xyz.json
as well instead of usingcat
.
– Haxiel
2 days ago
it says xyz.json : command not found
– Praveen Kumar
2 days ago
don't copy the "$" sign beforecat
– 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
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 yesterday
answered 2 days ago
Dmitry L.Dmitry L.
112
112
add a comment |
add a comment |
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.
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.
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