Использование jq для фильтрации набора данных из проекта «Математическая генеалогия» - PullRequest
0 голосов
/ 19 апреля 2020

С этим Json набором данных.

{
  "nodes": [
    {
      "students": [],
      "advisors": [
        258
      ],
      "name": "Archie Higdon",
      "school": "Iowa State University",
      "subject": "74—Mechanics of deformable solids",
      "thesis": "Stresses in Moderately Thick Rectangular Plates",
      "country": "UnitedStates",
      "year": 1936,
      "id": 2
    },
    {
      "students": [],
      "advisors": [
        258
      ],
      "name": "Donald Hill Rock",
      "school": "Iowa State University",
      "subject": null,
      "thesis": "Finite Strain Analysis in Elastic Theory",
      "country": "UnitedStates",
      "year": 1939,
      "id": 3
    },
    {
      "students": [],
      "advisors": [
        258
      ],
      "name": "William B. Stiles",
      "school": "Iowa State University",
      "subject": null,
      "thesis": "Solutions of Clamped Plated Problems by Means of Functions Derived from Membrane Characteristic Functions",
      "country": "UnitedStates",
      "year": 1945,
      "id": 6
    }
]

}

Мне было интересно, как я могу использовать jq для того, чтобы найти людей, которые закончили Технологию Джорджии с непустым списком студентов? Например, я хочу найти всех студентов, которые закончили Технологию Джорджии, которые продолжали консультировать студентов самостоятельно.

1 Ответ

0 голосов
/ 19 апреля 2020

Предполагая упрощенный json, подобный этому, который имеет некоторые значения, соответствующие условиям, о которых вы упомянули

{
  "nodes": [
    { "students": [2, 3], "advisors": [],  "name": "Person 1", "school": "Georgia Tech", "id": 1 },
    { "students": [],     "advisors": [1], "name": "Person 2", "school": "Georgia Tech", "id": 2 },
    { "students": [],     "advisors": [1], "name": "Person 3", "school": "Georgia Tech", "id": 3 }
  ]
}

Вы можете подрезать узлы только людям в "Технологии Джорджии" с

.nodes |= map( select( .school == "Georgia Tech" ) )

Вы можете обрезать узлы людям с непустыми учениками с помощью

.nodes |= map( select( .students | length > 0 ) )

. Вы можете комбинировать условия с and

.nodes |= map( 
   select( (.school == "Georgia Tech") and (.students | length > 0) ) 
)

Попробуйте онлайн!

...