중첩된 배열 내용으로 문서 만들기

중첩된 배열 내용으로 문서 만들기

다음 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최상위 배열의 항목이 배열인 경우 항목이 복사됩니다(위와 동일한 의미). 그렇지 않으면 그대로 유지됩니다.

관련 정보