Извлеките ключи и данные и напишите массив - PullRequest
0 голосов
/ 09 июля 2019

Учитывая следующий источник json

{
  "pages":{
        "yomama/first key": {
            "data": {
                "fieldset": "lesson-video-overview",
                "title": "5th Grade Math - Interpreting Fractions",
            },
            "order": 4
        },

        "yomama/second key": {
            "data": {
                "fieldset": "lesson-video-clip-single",
                "title": "Post-Lesson Debrief Part 5",
            },
            "order": 14
        },
        "yopapa/Third key": {
            "data": {
                "fieldset": "lesson-video-clip-single",
                "title": "Lesson Part 2B",
            },
            "order": 6
        }
    }
}

Как я могу вывести вывод типа массива, как это? Основная задача для меня - извлечь ключ, например, "yomama / first key" и в идеальном мире я могу фильтровать, как просто дать мне массив тех ключей, которые начинаются с "yomama" (но не yopapa)


[

    {
        "url" : "yomama/first key",
        "data": {
            "fieldset": "lesson-video-overview",
            "title": "5th Grade Math - Interpreting Fractions",
        },
        "order": 4
    },
    {
        "url" : "yomama/second key",
        "data": {
            "fieldset": "lesson-video-clip-single",
            "title": "Post-Lesson Debrief Part 5",
        },
        "order": 14
    },
    {
        "url" : "yopapa/Third key",
        "data": {
            "fieldset": "lesson-video-clip-single",
            "title": "Lesson Part 2B",
        },
        "order": 6
    }

]

Ответы [ 2 ]

3 голосов
/ 09 июля 2019

Предполагая, что ввод в so.json и исправлен в хорошо отформатированный JSON, вы можете использовать:

jq '[.pages | to_entries[] | {"url": .key, "data": .value.data, "order": .value.order}]' < so.json 
1 голос
/ 09 июля 2019

Вот решение, которое не требует явного включения всех остальных ключей:

.pages
| [ to_entries[]
    | select(.key | startswith("yomama"))
    | {url: .key} + .value ]
...