получить значения двух конкретных ключей в дереве JSON произвольной глубины - PullRequest
0 голосов
/ 23 октября 2018

Попытка синтаксического анализа дерева JSON (глубина которого априори неизвестна) для сопоставления значений строки "label" и словаря "bbox".Дерево JSON может (и обычно имеет) также иметь другой ключ / значения метки / bbox, вложенный в список 3-го ключа, называемого "children".

В этом списке "children" может бытьв свою очередь, могут быть вложены другие (несколько) уровней потомков (каждый из которых будет иметь больше ключей label / bbox.

Я хочу проанализировать все дерево JSON рекурсивно и возвращают словарь , который имеет ключи в качестве меток , и значение этого ключа является либо списком, либо набором bbox словарей. Могут (и, скорее всего, будут)кратный boundingBoxes для данной метки.

Таким образом, метка класса "собака" может иметь от 1 до многих ограничивающих прямоугольников, каждое из которых определяется словарем "topLeft", "topRight" "bottomLeftСловари ", и" bottomRight ", каждый из которых определяется ключом / значением" x "и" y ".

Пример ввода может быть:

"my_tree": [{
    "handle": 262258,
    "key2": "explorer.exe",
    "key3": "Win32",
    "box": {
        "topLeft": {
            "x": 0,
            "y": 1331
        },
        "topRight": {
            "x": 2560,
            "y": 1331
        },
        "bottomRight": {
            "x": 2560,
            "y": 1371
        },
        "bottomLeft": {
            "x": 0,
            "y": 1371
        }
    },
    "isOff": false,
    "isEnabled": false,
    "isKeyboardFocusable": false,
    "hasKeyboardFocus": false,
    "controlType": 50033,
    "uiElementType": "pane",
    "children": [{
        "key1": 131148,
        "key2": "explorer.exe",
        "name": "Start",
        "key3": "Win32",
        "box": {
            "topLeft": {
                "x": 0,
                "y": 1331
            },
            "topRight": {
                "x": 48,
                "y": 1331
            },
            "bottomRight": {
                "x": 48,
                "y": 1371
            },
            "bottomLeft": {
                "x": 0,
                "y": 1371
            }
        },
        "isOff": false,
        "isEnabled": false,
        "isKeyboardFocusable": false,
        "hasKeyboardFocus": false,
        "controlType": 50000,
        "uiElementType": "button",
        "children": []
    }

Пример вывода выровняет вложенную структуру и просто вернет словарь "labels" со связанным набором (или списком)bbox словари.

Примерно так:

{
    "dog" : {
        "boundingVertices" : {
            "topLeft": {
                "x": 0,
                "y": 1331
            },
            "topRight": {
                "x": 2560,
                "y": 1331
            },
            "bottomRight": {
                "x": 2560,
                "y": 1371
            },
            "bottomLeft": {
                "x": 0,
                "y": 1371
        },

        "boundingVertices" : {
            "topLeft": {
                "x": 33,
                "y": 31
            },
            "topRight": {
                "x": 17,
                "y": 98
            },
            "bottomRight": {
                "x": 102,
                "y": 56
            },
            "bottomLeft": {
                "x": 10,
                "y": 42
        }
    },

    "cat" : {
        "boundingVertices" : {
            "topLeft": {
                "x": 9,
                "y": 23
            },
            "topRight": {
                "x": 37,
                "y": 53
            },
            "bottomRight": {
                "x": 97,
                "y": 32
            },
            "bottomLeft": {
                "x": 85,
                "y": 58
        },

        "boundingVertices" : {
            "topLeft": {
                "x": 32,
                "y": 87
            },
            "topRight": {
                "x": 23,
                "y": 86
            },
            "bottomRight": {
                "x": 38,
                "y": 72
            },
            "bottomLeft": {
                "x": 90,
                "y": 45
        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...