Удалить выбранные элементы в структуре JSON с помощью jq - PullRequest
0 голосов
/ 18 апреля 2020

Я хочу удалить некоторые элементы в файле JSON, которые соответствуют критериям поиска, сохраняя при этом остальную часть структуры JSON. Элемент I w * sh для сопоставления и удаления является объектом в массиве .chapter - .tags.title, который содержит текст # MKR #

. У меня есть представление о том, как выбрать правильные элементы, используя :

jq -r '.chapters[] | select(.tags.title | contains("#MKR#"))' metadata.json

но не знаю, как выбрать и удалить эти элементы, оставив остальную часть структуры без изменений.

Пример ввода JSON - метаданные. json:

    {
        "chapters": [
            {
                "id": 0,
                "time_base": "1/3000",
                "start": 0,
                "start_time": "0.000000",
                "end": 9200,
                "end_time": "3.066667",
                "tags": {
                    "title": "Start"
                }
            },
            {
                "id": 1,
                "time_base": "1/3000",
                "start": 9200,
                "start_time": "3.066667",
                "end": 15000,
                "end_time": "5.000000",
                "tags": {
                    "title": "Example(1) #MKR#"
                }
            },
            {
                "id": 2,
                "time_base": "1/3000",
                "start": 15000,
                "start_time": "5.000000",
                "end": 18900,
                "end_time": "6.300000",
                "tags": {
                    "title": "Example(2)"
                }
            },
            {
                "id": 3,
                "time_base": "1/3000",
                "start": 18900,
                "start_time": "6.300000",
                "end": 124299,
                "end_time": "41.433000",
                "tags": {
                    "title": "Example(3) #MKR#"
                }
            },
            {
                "id": 4,
                "time_base": "1/3000",
                "start": 124299,
                "start_time": "41.433000",
                "end": 225700,
                "end_time": "75.233333",
                "tags": {
                    "title": "Example(4) #MKR#"
                }
            },
            {
                "id": 5,
                "time_base": "1/3000",
                "start": 225700,
                "start_time": "75.233333",
                "end": 231900,
                "end_time": "77.300000",
                "tags": {
                    "title": "Example(5) #MKR#"
                }
            }

        ],
        "format": {
            "filename": "video_mkr_temp.mp4",
            "nb_streams": 3,
            "nb_programs": 0,
            "format_name": "mov,mp4,m4a,3gp,3g2,mj2",
            "format_long_name": "QuickTime / MOV",
            "start_time": "0.000000",
            "duration": "968.300000",
            "size": "399977859",
            "bit_rate": "3304577",
            "probe_score": 100,
            "tags": {
                "major_brand": "mp42",
                "minor_version": "512",
                "compatible_brands": "isomiso2avc1mp41",
                "creation_time": "2020-04-12T00:46:21.000000Z"
            }
        }
    }

Пример Вывод JSON Я хочу достичь:

 {
        "chapters": [
            {
                "id": 0,
                "time_base": "1/3000",
                "start": 0,
                "start_time": "0.000000",
                "end": 9200,
                "end_time": "3.066667",
                "tags": {
                    "title": "Start"
                }
            },
            {
                "id": 2,
                "time_base": "1/3000",
                "start": 15000,
                "start_time": "5.000000",
                "end": 18900,
                "end_time": "6.300000",
                "tags": {
                    "title": "Example(2)"
                }
            },
        ],
        "format": {
            "filename": "video_mkr_temp.mp4",
            "nb_streams": 3,
            "nb_programs": 0,
            "format_name": "mov,mp4,m4a,3gp,3g2,mj2",
            "format_long_name": "QuickTime / MOV",
            "start_time": "0.000000",
            "duration": "968.300000",
            "size": "399977859",
            "bit_rate": "3304577",
            "probe_score": 100,
            "tags": {
                "major_brand": "mp42",
                "minor_version": "512",
                "compatible_brands": "isomiso2avc1mp41",
                "creation_time": "2020-04-12T00:46:21.000000Z"
            }
        }
    }

Любые мысли с благодарностью.

Спасибо

1 Ответ

0 голосов
/ 18 апреля 2020

Вы можете отфильтровать главы следующим образом:

jq '.chapters |= map(select(.tags.title | contains("#MKR#") | not))' metadata.json

Опция -r полезна только тогда, когда выходные данные фильтра являются строкой, тогда как здесь это json объект.

...