Группировка повторяющихся строк вывода в JQ - PullRequest
0 голосов
/ 20 октября 2018

Я пытаюсь преобразовать JSON, который выглядит как https://digitalcollections.ohsu.edu/api/items/11801, в селективный формат с разделителями табуляции с точкой с запятой для многозначного разделителя.Я могу выбрать нужные поля и получить их в формате с разделителями табуляции.

Однако я все еще не могу заставить многозначные поля объединяться в одно поле с разделителем точки с запятой, не получая супер грязных.Например,

jq '.element_texts[] | (select(.element.name=="Title") | .text), (select(.element.name=="Subject") | .text)'

выводит нужные мне поля.Но я не могу преобразовать 3 предмета, которые возвращаются с этим, в массив из 3 предметов, к которому я могу присоединиться - я всегда получаю 3 отдельные строки.Я могу сделать то, что мне нужно, делая

jq '(.element_texts[] | (select(.element.name=="Title") | .text), (select(.element.name=="Date") | .text)), ([.element_texts[] | (select(.element.name=="Subject") | .text)] | join(";"))'

, но я чувствую, что должен быть гораздо более простой и лучший способ, но я не могу понять, что это такое

1 Ответ

0 голосов
/ 20 октября 2018

С указанным входом следующий фильтр производит вывод, как показано:

.element_texts
| [(.[]
   | ((select(.element.name=="Title"),
      (select(.element.name=="Date")))
   | .text)),
   (map(select(.element.name=="Subject") | .text) 
    | join(";") ) ]
| @tsv

Выход

Esther Pohl Lovejoy, M.D.   1894    Lovejoy, Esther Clayson Pohl, M.D., 1869-1967\r\n;Physicians, Women;Portraits
...