jq: 중첩된 개체, 최상위 ID를 추출하고 내부 개체에서 값을 들어 올립니다.
이하에 기재되어 있는 경우xample.json
;
[
{
"id": 12345678,
"stuff": { "book": "shelf", "hook": "line", "took": "off", "info-spec": 12 },
"votes": 23
},
{
"id": 12345679,
"stuff": { "book": "maker", "hook": "sinker", "took": "pisin", "info-spec": 23 },
"votes": 1
}
]
추출할 수 있습니다.id
그리고.votes
간단하게:
$ jq '.[] | { id, votes }' xample.json
{
"votes": 23,
"id": 12345678
}
{
"votes": 1,
"id": 12345679
}
하지만 이 쿼리는 어떻게 생겼을까요?id
그리고.stuff.info-spec
? (나에게) 명백한 구문은 전혀 기능하지 않습니다.
$ jq '.[] | { id, stuff.info-spec }' xample.json
error: syntax error, unexpected '.', expecting '}'
.[] | { id, stuff.info-spec }
^
1 compile error
나는 노력했다.stuff[info-spec]
그리고.stuff["info-spec"]
하지만 어떻게 해야 할지 모르겠어요
키네임의 대시로 인해 더 복잡해지는 것 같습니다만, 이중 따옴표로 대응할 수 있는 것은 한정되어 있습니다.
$ sed 's/votes/vo-tes/g' xample.json | jq '.[] | { id, "vo-tes" }'
는 예상 출력을 제공합니다(즉, "vo-tes"의 대시 없이 위와 유사).
추출할 수 있다book
:
$ jq '.[] | .stuff.book' xample.json
그러나 다시 한 번 의 구문을 알아낼 수 없습니다.id
그리고.book
하지만 추출할 수 없습니다.info-spec
같은 구문을 사용합니다.
$ jq '.[] | .stuff."info-spec"' xample.json
error: syntax error, unexpected QQSTRING_START, expecting IDENT
.[] | .stuff."info-spec"
^
1 compile error
따옴표를 빼면 오류 메시지가 (예측대로) 다릅니다.
$ jq '.[] | .stuff.info-spec' xample.json
error: spec is not defined
.[] | .stuff.info-spec
^^^^
1 compile error
하지만 이건 효과가 있어
$ jq '.[] | .stuff["info-spec"] ' xample.json
12
23
이 예에서 원하는 출력은 다음과 같습니다.
{
"info-spec": 12,
"id": 12345678
}
{
"info-spec": 23,
"id": 12345679
}
FAQ와 Cookbook을 살펴봤는데 다른 오브젝트 안에 있는 오브젝트 안에서 아이템을 들어올리기 위한 구문은 찾을 수 없는 것 같습니다.
흥미로운 것은, 이 문제는 확실히 「-」자이기 때문에, 다음과 같습니다.
jq '.[] | { id, "info-spec": .stuff."info-spec" }' xample.json
{
"id": 12345678,
"info-spec": 12
}
{
"id": 12345679,
"info-spec": 23
}
아직 너의jq
이 구문은 다음 부분에서 끊어져서 마음에 들지 않는 것 같습니다.
jq '.[] | .stuff."info-spec"' xample.json
12
23
사용방법:
jq --version
jq-1.4
edit: <1.4> 버전의 문제인 것 같습니다.https://github.com/stedolan/jq/issues/38
겨우 알아냈어요.
$ jq '.[] | { id, "info-spec": .stuff["info-spec"] }' xample.json
{
"info-spec": 12,
"id": 12345678
}
{
"info-spec": 23,
"id": 12345679
}
여기서의 열쇠는, 이 머신을newkey: .complex["key"]
리프팅 표기법.
언급URL : https://stackoverflow.com/questions/27562424/jq-nested-object-extract-top-level-id-and-lift-a-value-from-internal-object
'programing' 카테고리의 다른 글
콘솔의 차이점은 무엇입니까?WriteLine() 대 Debug.줄 쓰기()? (0) | 2023.05.29 |
---|---|
JSON 스키마 검증 (0) | 2023.03.06 |
HH 변환:MM: SS에서 초까지의 monentjs (0) | 2023.03.06 |
React Redux 앱의 서버에서 초기 데이터를 가져오려면 어디로 가야 합니까? (0) | 2023.03.06 |
react this.state가 정의되지 않았습니까? (0) | 2023.03.06 |