다음 JSON이 주어지면:
[
{
"command": "1",
"response": [
"a",
"b",
"c"
],
"guild_id": "guild"
},
{
"command": "1",
"response": "d",
"guild_id": "guild"
},
]
을 사용하여 어떻게 다음과 같이 변환할 수 있나요 jq
?
[
{
"command": "1",
"response": "a",
"guild_id": "guild"
},
{
"command": "1",
"response": "b",
"guild_id": "guild"
},
{
"command": "1",
"response": "c",
"guild_id": "guild"
},
{
"command": "1",
"response": "d",
"guild_id": "guild"
},
]
답변1
jq 'map(if (.response|type == "array") then .response = .response[] else . end)' file
response
이는 최상위 배열의 각 요소에 있는 항목 유형을 테스트합니다. 배열인 경우 항목은 "폭발"되거나 각 배열 요소에 대해 한 번씩 반복됩니다. 그렇지 않으면 그대로 유지됩니다.
질문에 있는 데이터를 바탕으로 한 결과(문제가 되는 쉼표가 제거됨):
[
{
"command": "1",
"response": "a",
"guild_id": "guild"
},
{
"command": "1",
"response": "b",
"guild_id": "guild"
},
{
"command": "1",
"response": "c",
"guild_id": "guild"
},
{
"command": "1",
"response": "d",
"guild_id": "guild"
}
]
똑같지만 조금 더 신비스럽습니다.
jq 'map(.response = .response[]? // .)' file
response
최상위 배열의 항목이 배열인 경우 항목이 복사됩니다(위와 동일한 의미). 그렇지 않으면 그대로 유지됩니다.