Чтение значений JSON, только если элемент существует в Python - PullRequest
0 голосов
/ 22 октября 2019

У меня есть данные json, возвращенные из вызова Jira API. Я хочу получить значение для isselinks.type.name, только если эта ссылка на выпуск является внешней ссылкой (имеет атрибут outwardIssue). И я бы также дал ссылку, чтобы получить значение isselinks.outwardIssue.key.

Вот что я пробовал до сих пор:

 data = response.json()

 json_tree = objectpath.Tree(data['fields'])

 linkTypes = tuple(json_tree.execute('$..issuelinks[len(@.outwardIssue.key) > 0].(type.name)'))    
 linkedIssues = tuple(json_tree.execute('$..issuelinks.outwardIssue.key'))

Для linkTypes это захватывает все атрибуты длякаждый элемент isselinks независимо от атрибута outwardIssue.

По сути, мне просто нужно знать, является ли ссылка внутренней или внешней, тип ссылки и ключ выпуска.

В приведенном ниже json вы можетевидим, что есть 1 элемент inwardIssue и 1 элемент outwardIssue.

Структура json выглядит следующим образом.

"fields": {

   "issuelinks": [
            {
                "id": "51311",
                "self": "url",
                "type": {
                    "id": "10030",
                    "name": "Cloners",
                    "inward": "is cloned by",
                    "outward": "clones",
                    "self": "url"
                },
                "inwardIssue": {
                    "id": "136484",
                    "key": "ABCD-9579",
                    "self": "url",
                    "fields": {
                        "summary": "",
                        "status": {
                            "self": "url",
                            "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.",
                            "iconUrl": "url",
                            "name": "Closed",
                            "id": "6"
                        },
                        "priority": {
                            "self": "url",
                            "iconUrl": "url",
                            "name": "Critical",
                            "id": "6"
                        },
                        "issuetype": {
                            "self": "url",
                            "id": "24",
                            "description": "",
                            "iconUrl": "url",
                            "name": "Script",
                            "subtask": true
                        }
                    }
                }
            },
            {
                "id": "50884",
                "self": "url",
                "type": {
                    "id": "10020",
                    "name": "Related",
                    "inward": "Is related with",
                    "outward": "Relates to",
                    "self": "url"
                },
                "outwardIssue": {
                    "id": "134430",
                    "key": "ABCD-185",
                    "self": "url",
                    "fields": {
                        "summary": "",
                        "status": {
                            "self": "url",
                            "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.",
                            "iconUrl": "url",
                            "name": "Closed",
                            "id": "6"
                        },
                        "priority": {
                            "self": "url",
                            "iconUrl": "url",
                            "name": "Blocker",
                            "id": "1"
                        },
                        "issuetype": {
                            "self": "url",
                            "id": "1",
                            "description": "A problem which impairs or prevents the functions of the product.",
                            "iconUrl": "url",
                            "name": "Defect",
                            "subtask": false
                        }
                    }
                }
            }

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