jq(명령줄 JSON 프로세서)는 STDIN의 여러 JSON 문자열을 병합합니다.

jq(명령줄 JSON 프로세서)는 STDIN의 여러 JSON 문자열을 병합합니다.

jq 명령을 사용하여 STDIN에서 두 개의 서로 다른 JSON 문자열을 병합하려고 합니다(파일이 아닌 파이프 사용). 시도한 명령은 다음과 같습니다.

curl  ipinfo.io api.ipify.org/?format=json 2>/dev/null | jq -s

산출:

[
  {
    "ip": "139.162.244.103",
    "hostname": "businessproservices.com",
    "city": "London",
    "region": "England",
    "country": "GB",
    "loc": "51.5142,-0.0931",
    "postal": "EC2V",
    "org": "AS63949 Linode, LLC"
  },
  {
    "ip": "139.162.244.103"
  }
]

예상 출력:

{
  "ip": "139.162.244.103",
  "hostname": "businessproservices.com",
  "city": "London",
  "region": "England",
  "country": "GB",
  "loc": "51.5142,-0.0931",
  "postal": "EC2V",
  "org": "AS63949 Linode, LLC"
}

답변1

명령 curl은 두 개의 호스트를 쿼리합니다. 각각은 JSON 문서를 반환합니다. jq -s이를 배열의 두 항목으로 함께 추가합니다. 첫 번째 항목(예: 예상 출력으로 렌더링하는 것)을 얻으려면 다음 에서 요청 first(또는 .[0]) 하면 됩니다.jq

curl -s ipinfo.io 'api.ipify.org/?format=json' | jq -s 'first'

또는 처음부터 첫 번째 호스트를 사용하십시오.

curl ipinfo.io

실제로병합이 두 문서는 반환된 목록에 jq명령을 적용합니다.add

curl -s ipinfo.io 'api.ipify.org/?format=json' | jq -s 'add'

JSON 객체는 동일한 이름을 가진 여러 키를 포함할 수 없으므로 모든 후속 키는바꾸다동등한 이전 키를 사용하여 문서 jq -s

[
  {
    "ip": "139.162.244.103",
    "hostname": "businessproservices.com",
    "city": "London",
    "region": "England",
    "country": "GB",
    "loc": "51.5142,-0.0931",
    "postal": "EC2V",
    "org": "AS63949 Linode, LLC"
  },
  {
    "ip": "39.62.44.1",
    "country": "UK"
  }
]

그러면 이것은 다음으로 병합됩니다.

{
  "ip": "39.62.44.1",
  "hostname": "businessproservices.com",
  "city": "London",
  "region": "England",
  "country": "UK",
  "loc": "51.5142,-0.0931",
  "postal": "EC2V",
  "org": "AS63949 Linode, LLC"
}

jq -s add대신 사용하는 경우 jq -s.

답변2

echo '
[
  {
    "ip": "139.162.244.103",
    "hostname": "businessproservices.com",
    "city": "London",
    "region": "England",
    "country": "GB",
    "loc": "51.5142,-0.0931",
    "postal": "EC2V",
    "org": "AS63949 Linode, LLC"
  },
  {
    "ip": "127.0.0.1",
    "country": "UK",
    "additional": "added Value"
  }
]' | jq  "add"

결과

{
  "ip": "127.0.0.1",
  "hostname": "businessproservices.com",
  "city": "London",
  "region": "England",
  "country": "UK",
  "loc": "51.5142,-0.0931",
  "postal": "EC2V",
  "org": "AS63949 Linode, LLC",
  "additional": "added Value"
}```

관련 정보