jq에서 각 첫 번째 수준 json 필드를 자체 줄에 인쇄하는 방법은 무엇입니까?

jq에서 각 첫 번째 수준 json 필드를 자체 줄에 인쇄하는 방법은 무엇입니까?

다음 명령을 사용하여 json 파일을 예쁘게 인쇄할 때

cat xx.json | jq .

, 각 필드를 한 줄에 인쇄합니다. 예를 들어 json 파일에 xy 좌표 배열이 포함되어 있으면 출력이 매우 길어집니다.

jqjson 개체(즉, 루트의 직계 하위 필드)의 각 첫 번째 수준 필드를 자체 줄에 인쇄하는 방법이 있나요 ?

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]]"
    ]
  ]
}

라는 도구가 있습니다.jtcjq는 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

...각 섹션은 화살표 키를 사용하여 쉽게 접을 수 있습니다.

관련 정보