수정하고 싶지 않은 json 파일이 있습니다. 문제는 json 파일의 대상 키가 다르다는 것입니다. 예를 들어 다음 두 json은 다음과 같습니다.
{
"tasks": [{
"type": "type1",
"params": {
"get": "something",
"foo": {
"bar1": ["TEMPLATE"]
}
}
}]
}
{
"tasks": [{
"type": "type1",
"params": {
"get": "something",
"foo": {
"different1": ["TEMPLATE"]
}
}
}]
}
키 값을 동적으로 변경하고 싶습니다 bar1
. different1
키 경로는 모든 json에서 일정하므로 jq를 사용하면 다음과 같습니다.
jq '.tasks[0].params.foo' my_json_file.json
다음 코드를 시도했습니다.
new_value="something"
jq --arg new "$new_value" '.tasks[0].params.foo[] = $new' my_json_file.json
그러나 이 방법으로 key 값이 대체됩니다 bar1
. 기록된 결과는 다음과 같습니다."something"
["something"]
{
"tasks": [{
"type": "type1",
"params": {
"get": "something",
"foo": {
"different1": "something"
}
}
}]
}
내가 원하는 것 대신:
{
"tasks": [{
"type": "type1",
"params": {
"get": "something",
"foo": {
"different1": ["something"]
}
}
}]
}
jq에서는 이것이 어렵지 않다고 확신하지만 해결책을 찾을 수 없습니다.
답변1
무엇에 대해서...?
jq --arg new "something" '.tasks[0].params.foo[] = [ $new] ' file
답변2
키에 접근하지 않고도 with_entries(..)
배열을 사용하고 직접 조작할 수 있습니다.values[]
jq --arg new "something" '.tasks[0].params.foo |= with_entries(.value[] = $new)'