jq에서 여러 필드를 어떻게 선택합니까?


103

내 입력 파일은 다음과 같습니다.

{
"login": "dmaxfield",
"id": 7449977,
...
}
{
"login": "dmaxfield",
"id": 7449977,
...
}

이 모든 로그인 이름을 얻을 수 있습니다. cat members | jq '.[].login'

하지만 로그인과 ID를 모두 얻기 위해 구문을 해독 할 수 없었습니까?


예상되는 출력이 어떻게 표시되어야하는지에 대한 예를 제공 할 수 있습니까? 로그인 / ID 쌍을 표시 할 수있는 방법에는 여러 가지가 있습니다.

답변:


145

를 사용 jq '.[] | .login, .id'하여 각 로그인 뒤에 해당 ID를 얻을 수 있습니다 .


1
사용자의 샘플 입력은 객체의 스트림처럼 보이지만 그들이 제공하는 샘플 스크립트 때문에 생략 한 배열로 래핑되었다고 가정합니다.

1
@SantiagoLapresta : 그 가정은 필요 없습니다. jq일련의 객체와 잘 작동합니다. 배열 래퍼가 필요하지 않습니다. ...문자열과 마지막 후행 쉼표의 필요성 제거는,하지만 난 암시 할 것을 고려한다.
피터 V. Mørch

56
또는이 두 필드 만 표시하려는 경우. jq '.[] | {login, id}'
Cameron Taggart 2017 년

4
@CameronTaggart, 표시하려면 어떻게해야 login.name합니까? jq '.[] | {login.name, id}'작동하는 것 같습니다. 올바른 방법은 무엇입니까?
zyxue

7
@zyxue 작동 :jq '.[] | {name: .login.name, id}'
Alex Grounds

72

이것은 나를 위해 작동합니다.

> echo '{"a":1,"b":2,"c":3}{"a":1,"b":2,"c":3}' | jq '{a,b}'
{
  "a": 1,
  "b": 2
}
{
  "a": 1,
  "b": 2
}

이것은 간단하고 정확하게 내가 원하는 것을 수행합니다. 여러 개의 입력 개체 / 해시를 가지고 일부 값만 가져 가면서도 개체로 출력합니다.
Smar

11

다른 수준 (즉, 첫 번째 및 두 번째 수준 모두)으로 들여 쓰기 된 값을 선택하려면 다음을 사용할 수 있습니다.

$ echo '[{"a":{"aa":1,"ab":2},"b":3,"c":4},{"a":{"aa":5,"ab":6},"b":7,"c":8}]'|jq '.[]|[.a.aa,.a.ab,.b]'

[
  1,
  2,
  3
]
[
  5,
  6,
  7
]

4

여기에 예제를 하나 더 제공하십시오 (jq-1.6).

배열을 살펴보고 개체 요소의 필드와 해당 개체의 개체 필드를 선택합니다.

echo '[{"id":1, "private_info": {"name": "Ivy", "age": 18}}, {"id":2, "private_info": {"name": "Tommy", "aga": 18}}]' | jq ".[] | {id: .id, name: .private_info.name}" -

{
  "id": 1,
  "name": "Ivy"
}
{
  "id": 2,
  "name": "Tommy"
}

예제 데이터없이 :

jq ".[] | {id, name: .private_info.name}" -

.[]: 배열 살펴보기

{id, name: .private_info.name}: .id 및 .private_info.name을 가져 와서 필드 이름이 "id"및 "name"인 개체로 각각 래핑합니다.


구조 / 키 이름을 유지하기 위해 객체로 포장 내가 찾고 있어요 그냥 뭐, 대단한
cryanbhu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.