получение нулевых значений из запроса jq - PullRequest
0 голосов
/ 04 марта 2020

Я новичок в jq и попытался извлечь только значения из ключей "таксономия / определения" в виде списка из этого файла json (в нем гораздо больше объектов, чем вставлено здесь).

[
    {
        "taxonomy/relations": {
            "taxonomy/broader": 1,
            "taxonomy/narrower": 0,
            "taxonomy/related": 0,
            "taxonomy/substitutability-to": 0,
            "taxonomy/substitutability-from": 0
        },
        "taxonomy/id": "ZxHj_Wvj_39H",
        "taxonomy/type": "skill",
        "taxonomy/definition": "VM/CMS, operativsystem",
        "taxonomy/preferred-label": "VM/CMS, operativsystem"
    },
    {
        "taxonomy/relations": {
            "taxonomy/broader": 1,
            "taxonomy/narrower": 0,
            "taxonomy/related": 0,
            "taxonomy/substitutability-to": 0,
            "taxonomy/substitutability-from": 0
        },
        "taxonomy/id": "oRCp_wLd_dWd",
        "taxonomy/type": "skill",
        "taxonomy/definition": "OS/400, operativsystem",
        "taxonomy/preferred-label": "OS/400, operativsystem"
    }
]

Я пришел к следующей команде:

jq -r '.[]."taxonomy/definitions$"' skills.json

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

1 Ответ

1 голос
/ 04 марта 2020

Ваша идея верна, но операция итератора значения .[] не принимает символы регулярного выражения напрямую. Это означает, что ваш $ якорь в конце taxonomy/definition неправильный и должен быть удален. Вы можете просто сделать

jq -r '.[]."taxonomy/definition"?'

или если вы хотите использовать подход на основе регулярных выражений, чтобы точно соответствовать "taxonomy/definition", вы можете сделать

jq -r 'map(to_entries[] | select(.key| test("^taxonomy/definition$")?).value)[]'
...