다음 명령을 사용하여 json 파일을 예쁘게 인쇄할 때
cat xx.json | jq .
, 각 필드를 한 줄에 인쇄합니다. 예를 들어 json 파일에 xy 좌표 배열이 포함되어 있으면 출력이 매우 길어집니다.
jq
json 개체(즉, 루트의 직계 하위 필드)의 각 첫 번째 수준 필드를 자체 줄에 인쇄하는 방법이 있나요 ?
k
보다 일반적으로, 레벨 k의 각 하위 항목이 해당 하위 항목(k보다 큰 레벨)을 포함하는 줄에 인쇄되도록 json 객체를 레벨로 확장하는 방법이 있습니까 ?
-- 설명:
작은 예시는 다음과 같습니다.
echo '{"type":"MultiPolygon","coordinates":[[[[-94.9065,38.9884],[-94.8682,39.0596],[-94.6053,39.0432],[-94.6108,38.8460],[-94.6108,38.7365],[-94.9668,38.7365],[-95.0544,38.7365],[-95.0544,38.9829]]]]}"' | jq .
생성하다:
{
"type": "MultiPolygon",
"coordinates": [
[
[
[
-94.9065,
38.9884
],
[
-94.8682,
39.0596
],
[
-94.6053,
39.0432
],
[
-94.6108,
38.846
],
[
-94.6108,
38.7365
],
[
-94.9668,
38.7365
],
[
-95.0544,
38.7365
],
[
-95.0544,
38.9829
]
]
]
]
}
"coordinates"
한 행의 모든 값과 각 형제의 값을 인쇄 하고 싶습니다 (더 일반적으로 coordinates
는 필드가 루트의 1번째 레벨이 아닌 k번째 레벨에 있는 경우 동일한 효과를 얻고 싶습니다).
답변1
유틸리티 jq
는 예쁜 인쇄에 대해 이러한 수준의 제어를 제공하지 않습니다. 아마도 사용할 수 있는 가장 간단한 접근 방식은 jq
직렬화된 구조 부분을 출력하는 것입니다.
$ jq '.coordinates[][] |= map(@json)' file
{
"type": "MultiPolygon",
"coordinates": [
[
[
"[-94.9065,38.9884]",
"[-94.8682,39.0596]",
"[-94.6053,39.0432]",
"[-94.6108,38.846]",
"[-94.6108,38.7365]",
"[-94.9668,38.7365]",
"[-95.0544,38.7365]",
"[-95.0544,38.9829]"
]
]
]
}
그러면 배열 내의 배열이 .coordinates[][]
직렬화된 배열을 나타내는 JSON 인코딩 문자열로 대체됩니다. 직렬화된 배열이 fromjson
먼저 전달되지 않으면 더 이상 처리에 사용되지 않습니다 jq
. 그러나 출력이 시각화만을 위한 것이라면 이 방법으로도 충분할 수 있습니다.
더 높은 수준의 직렬화를 적용합니다.
$ jq '.coordinates[] |= map(@json)' file
{
"type": "MultiPolygon",
"coordinates": [
[
"[[-94.9065,38.9884],[-94.8682,39.0596],[-94.6053,39.0432],[-94.6108,38.846],[-94.6108,38.7365],[-94.9668,38.7365],[-95.0544,38.7365],[-95.0544,38.9829]]"
]
]
}
라는 도구가 있습니다.jtc
jq
는 JSON 문서에 대한 일반적인 예쁜 인쇄 및 압축 출력 형식 에서 영감을 받아 제공합니다. 또한 가장 안쪽 개체를 간결한 방식으로 표시하는 "반간소화" 형식도 있습니다.
$ jtc -tc file
{
"coordinates": [
[
[
[ -94.9065, 38.9884 ],
[ -94.8682, 39.0596 ],
[ -94.6053, 39.0432 ],
[ -94.6108, 38.846 ],
[ -94.6108, 38.7365 ],
[ -94.9668, 38.7365 ],
[ -95.0544, 38.7365 ],
[ -95.0544, 38.9829 ]
]
]
],
"type": "MultiPolygon"
}
저는 이에 대해 잘 알지 못하기 jtc
때문에 이 출력 형식이 구성 가능한지 즉시 말할 수 없습니다.사용자 설명서임을 보여주다아니요원하는 방식으로 정확하게 구성하세요.) 또한 이는 jtc
키별로 객체를 정렬한다는 점에 유의하세요.
당신도 옳을 수도 있습니다. . . 관심이 있다jless
목표가 터미널에서 데이터를 수동으로 탐색하거나 보는 것인 경우. 기본적으로 다음과 같은 데이터가 표시됩니다.
▼ {type: "MultiPolygon", coordinates: […]}
type: "MultiPolygon"
▽ coordinates: [[[[…], […], […], […], […], […], […], […]]]]
▽ [0]: [[[…], […], […], […], […], […], […], […]]]
▽ [0]: [[…], […], […], […], […], […], […], […]]
▽ [0]: [-94.9065, 38.9884]
[0]: -94.9065
[1]: 38.9884
▽ [1]: [-94.8682, 39.0596]
[0]: -94.8682
[1]: 39.0596
▽ [2]: [-94.6053, 39.0432]
[0]: -94.6053
[1]: 39.0432
▽ [3]: [-94.6108, 38.846]
[0]: -94.6108
[1]: 38.846
▽ [4]: [-94.6108, 38.7365]
[0]: -94.6108
[1]: 38.7365
▽ [5]: [-94.9668, 38.7365]
[0]: -94.9668
[1]: 38.7365
▽ [6]: [-95.0544, 38.7365]
[0]: -95.0544
[1]: 38.7365
▽ [7]: [-95.0544, 38.9829]
[0]: -95.0544
[1]: 38.9829
...각 섹션은 화살표 키를 사용하여 쉽게 접을 수 있습니다.