매우 큰(>100,000행) JSON 파일에서 노드당 두 개의 데이터 필드(스칼라 1개와 배열 1개)를 추출하는 방법은 무엇입니까?

매우 큰(>100,000행) JSON 파일에서 노드당 두 개의 데이터 필드(스칼라 1개와 배열 1개)를 추출하는 방법은 무엇입니까?

기본적으로 다음과 같은 구조를 가진 139,000줄의 JSON 파일이 있습니다(OpenStreetMap에서 가져옴).

{
  "type": "FeatureCollection",
  "generator": "overpass-ide",
  "features": [
    {
      "type": "Feature",
      "properties": {
        "@id": "relation/7859",
        "TMC:cid_58:tabcd_1:Class": "Area",
        "TMC:cid_58:tabcd_1:LCLversion": "9.00",
        "TMC:cid_58:tabcd_1:LocationCode": "4934",
        "leisure": "park",
        "name": "Platnersberg",
        "type": "multipolygon",
        "@geometry": "center"
      },
      "geometry": {
        "type": "Point",
        "coordinates": [
          11.128184,
          49.4706035
        ]
      },
      "id": "relation/7859"
    },
    {
      "type": "Feature",
      "properties": {
        "@id": "relation/62370",
        "TMC:cid_58:tabcd_1:Class": "Area",
        "TMC:cid_58:tabcd_1:LCLversion": "8.00",
        "TMC:cid_58:tabcd_1:LocationCode": "1157",
        "admin_level": "6",
        "boundary": "administrative",
        "de:place": "city",
        "name": "Eisenach",
        "type": "boundary",
        "@geometry": "center"
      },
      "geometry": {
        "type": "Point",
        "coordinates": [
          10.2836229,
          50.9916015
        ]
      },
      "id": "relation/62370"
    }
  ]
}

대신 이 파일에 있는 각 기능의 이름, TMC 위치 코드 및 좌표를 가져오고 싶습니다. 가급적이면 CSV 파일을 사용하세요.

location_code,name,latitude,longitude

모든 추가 노드를 제거하는 정규식을 만들 수 있다는 것을 알고 있지만 이는 상당히 복잡한 과정이 될 것입니다. jqOpenSuSE Leap 15.1 시스템에도 이 도구를 설치했지만 이 도구는 아직 익숙하지 않습니다 .

이 추출 작업을 수행하는 방법에 대한 아이디어가 있습니까?

답변1

저도 초보이지만 제 생각에는

$ jq -r '.features[] | select(.type == "Feature") | [.properties."TMC:cid_58:tabcd_1:LocationCode",.properties.name,.geometry.coordinates[]] | @csv' file.json
"4934","Platnersberg",11.128184,49.4706035
"1157","Eisenach",10.2836229,50.9916015

그것은 이루어져야합니다. 필터가 select(.type == "Feature")필요하지 않을 수도 있습니다. 다른 유형을 사용할 수 있는지 확실하지 않습니다.

관련 정보