Сбор всех значений от корня к листу вдоль каждого пути в древовидном объекте json с помощью JQ - PullRequest
0 голосов
/ 20 декабря 2018

Сбор всех корневых значений в каждом пути в древовидном объекте json с помощью JQ.Кажется, что это должно быть легко с функциями ходьбы или выравнивания, но я не могу понять это, несмотря на некоторые полезные вопросы, которые уже были заданы.

У меня есть

 {
     "cond1":["a","b","c"],
     "cond2":["a1","b2","c"],
     "cond2":["a","b","c3"]    
 }    

Я хочу это

["cond1","a"]
["cond1","b"]
["cond1","c"]
["cond2","a1"]
["cond2","b2"]
["cond2","c"]
["cond2":"a"]
["cond2":"b"]
["cond2":"c3"]

Подобные вопросы: https://github.com/stedolan/jq/issues/646 jq - Как распечатать родительское значение объекта, когда я уже глубоко в дочерних объектах?

Кроме того, как бы отличался ответ, если бы вместо ["a", "b", "c"] массив состоял из вложенных объектов, т.е. [["x2", "x3"], ["x1, "x2"]]

1 Ответ

0 голосов
/ 20 декабря 2018

Ключ к ответу на оба вопроса - paths.Например, следующий фильтр производит желаемый вывод в первом случае:

paths as $p
| getpath($p)
| select(scalars)
| ($p | map(select(type=="string"))) + [.]

Тот же фильтр может использоваться с любым допустимым JSON в качестве ввода.Заменив .cond2 допустимым вложенным массивом вдоль строк, показанных в Q, результат будет:

["cond1","a"]
["cond1","b"]
["cond1","c"]
["cond2","x2"]
["cond2","x3"]
["cond2","x1"]
["cond2","x2"]
...