Вот некоторые примеры данных: https://gist.github.com/dmc2015/19fc41aa677ba02a3bc49c53057ce408
Каждый скрипт, который у меня есть ниже, должен работать, но я не знаю, как их комбинировать. Мне нужно сделать следующее:
jq '.cards[] | select(.closed == false) | with_entries(if .key == "id" then .key = "trello_id" else . end) | .' data.json
возвращает:
{
"trello_id": "1234",
...
..
}
jq '.cards[] | with_entries(select([.key] | inside(["name", "description"]) ) ) | .' data.json
возвращает:
{
"desc": "*Important Notes* ",
"name": "Housing - Lawrence"
}
jq '.cards[] |
.checklists[] | select(.name == "Acct Information") |
.checkItems[] | select(.name | contains ("Location")) |
.name | .' data.json |
cut -d ":" -f 1 | sed 's/"//g' | sed -e 's/\(.*\)/\L\1/' | sed -r 's/\s+/_/g'
возвращает: location_address
jq '.cards[] | .checklists[] | select(.name == "Acct Information") |
.checkItems[] | select(.name | contains ("Location")) |
.name | .' data.json |
cut -d ":" -f 2 |
sed -e 's/\"//g' -e 's/*//g'
возвращается "123 Hopscotch Way"
Я могу сделать большинство частей по отдельности, но я изо всех сил пытаюсь найти способ сделать все это в одном запросе. Это что-то близкое к конечному результату, который я хочу.
[
{
"trello_id": "1234",
"desc": "*Important Notes* ",
"name": "Housing - Lawrence"
"location_address": "123 Hopscotch Way"
}
]
Одна из причин, по которой вы должны делать то, что просил @Inian (хотя, если исходный JSON большой, пожалуйста, обрежьте его в соответствии с рекомендациями минимального воспроизводимого примера), заключается в том, что очевидно, что очень простое решение должно быть возможно. используя jq, но это сложно объяснить без примера.
А ваша команда jq работает или нет? Пожалуйста, предоставьте минимальный воспроизводимый пример. NB |.
является избыточным и может быть исключен из любой программы jq.
отредактировано с образцом данных @Inian
@peak я добавил данные
Может ли что-то подобное быть тем, что вы ищете?
.cards | map(
select(.closed == false) | {trello_id: .id, desc, name} + ([
.checklists[] | select(.name == "Acct Information")
| .checkItems[].name | select(contains("Location"))
| capture("(?<key>[^:]*):\\s*(?<value>.*)")
| .key |= (gsub("\\s+"; "_") | ascii_downcase)
| .value |= gsub("\\*"; "")
] | from_entries)
)
[
{
"trello_id": "1234",
"desc": "*Important Notes* ",
"name": "Housing - Lawrence",
"location_address": "123 Hopscotch Way"
}
]
Опубликуйте исходный JSON и точный ожидаемый результат в формате JSON.