从JSON变量中删除嵌套项

eaf3rand  于 2023-05-19  发布在  其他
关注(0)|答案(2)|浏览(134)

首先-我不是Python大师,只是学习。
我有一个代码,它将我个人Jira空间中的所有问题解析为一个大的JSON变量。我想删除不必要的嵌套字段,如createdAt等。
你有一个解决方案,如何做到这一点?
这是我的输出示例:

{
    "expand": "names,schema",
    "issues": [
        {
            "expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields",
            "fields": {
                "assignee": {
                    "active": true,
                    "avatarUrls": {
                        "16x16": "https://jira.link.se/secure/useravatar?size=xsmall&avatarId=6559",
                        "24x24": "https://jira.link.se/secure/useravatar?size=small&avatarId=6559",
                        "32x32": "https://jira.globalrelay.net/secure/useravatar?size=medium&avatarId=6559",
                        "48x48": "https://jira.link.se/secure/useravatar?avatarId=6559"
                    },
                    "displayName": "Vasiliy Utkin",
                    "emailAddress": "Vasiliy@utkin.net",
                    "key": "JIRAHUIRA221",
                    "name": "uassya@link.se",
                    "self": "https://jira.link.se/rest/api/2/user?username=uassya@utkin.net",
                    "timeZone": "America/Toronto"
                },
                "status": {
                    "description": "",
                    "iconUrl": "https://jira.link.se/images/icons/statuses/open.png",
                    "id": "6559",
                    "name": "To Do",
                    "self": "https://jira.link.se/rest/api/2/status/6559",
                    "statusCategory": {
                        "colorName": "default",
                        "id": 2,
                        "key": "new",
                        "name": "To Do",
                        "self": "https://jira.link.se/rest/api/2/statuscategory/2"
                    }
                },
                **"summary": "Jumping over the tree"**
            },
            "id": "2234",
            "key": "XXX-1",
            "self": "https://jira.link.se/rest/api/2/issue/6559"
        }
    ],
[
        {
            "expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields",
            "fields": {
                "assignee": {
                    "active": true,
                    "avatarUrls": {
                        "16x16": "https://jira.link.se/secure/useravatar?size=xsmall&avatarId=6559",
                        "24x24": "https://jira.link.se/secure/useravatar?size=small&avatarId=6559",
                        "32x32": "https://jira.globalrelay.net/secure/useravatar?size=medium&avatarId=6559",
                        "48x48": "https://jira.link.se/secure/useravatar?avatarId=6559"
                    },
                    "displayName": "Vasiliy Utkin",
                    "emailAddress": "Vasiliy@utkin.net",
                    "key": "JIRAHUIRA221",
                    "name": "uassya@link.se",
                    "self": "https://jira.link.se/rest/api/2/user?username=uassya@utkin.net",
                    "timeZone": "America/Toronto"
                },
                "status": {
                    "description": "",
                    "iconUrl": "https://jira.link.se/images/icons/statuses/open.png",
                    "id": "6559",
                    "name": "To Do",
                    "self": "https://jira.link.se/rest/api/2/status/6559",
                    "statusCategory": {
                        "colorName": "default",
                        "id": 2,
                        "key": "new",
                        "name": "To Do",
                        "self": "https://jira.link.se/rest/api/2/statuscategory/2"
                    }
                },
                **"summary": "Jumping over the tree"**
            },
            "id": "2234",
            "key": "XXX-1",
            "self": "https://jira.link.se/rest/api/2/issue/6559"
        }
    ],
    "maxResults": 50,
    "startAt": 0,
    "total": 2
}

我尝试了什么-这是我的代码:

json_obj = json.loads(printInfo)

del json_obj["expand"]
del json_obj["maxResults"]
del json_obj["startAt"]
del json_obj["total"]

这些行可以删除所有第一级字段,但不能嵌套。我试图找到删除嵌套值的方法,但没有成功。
我试着写了一些这样的代码:
del json_obj[{'issues': {'expand'}}]
但效果不太好。
预期输出是一个新的JSON,其中包含来自样本输入的数据:

{
    "active": true,
    "displayName": "Vasiliy Utkin",
    "emailAddress": "Vasiliy@utkin.net",
    "name": "To Do",\*\*
    "key": "new",
    "name": "To Do",
    "summary": "Jumping over the tree"
    "key": "XXX-1",
},
{
    "active": true,
    "displayName": "Vasiliy Utkin",
    "emailAddress": "Vasiliy@utkin.net",
    "name": "To Do",\*\*
    "key": "new",
    "name": "To Do",
    "summary": "Jumping over the tree"
    "key": "XXX-1",
}

我还需要在一个额外的全局变量中有一个key值。

of1yzvn4

of1yzvn41#

issues是一个列表,所以循环遍历它并删除嵌套的键。

for issue in json_obj['issues']:
    del issue['expand']
d4so4syb

d4so4syb2#

下面是一个将所需信息提取到单独列表中的示例。删除是不够的,因为你需要重新组织。请注意,我已经调整了关键点,以避免重复。

import json

data = json.load(open('x.json'))

info = []
for row in data['issues']:
    rec = {
        'key': row['key'],
        'active': row['fields']['assignee']['active'],
        'displayName': row['fields']['assignee']['displayName'],
        'emailAddress': row['fields']['assignee']['emailAddress'],
        'status-name': row['fields']['status']['statusCategory']['name'],
        'status-key': row['fields']['status']['statusCategory']['key'],
        'summary': row['fields']['summary']
    }
    info.append( rec )

from pprint import pprint
pprint(info)

输出:

[{'active': True,
  'displayName': 'Vasiliy Utkin',
  'emailAddress': 'Vasiliy@utkin.net',
  'key': 'XXX-1',
  'status-key': 'new',
  'status-name': 'To Do',
  'summary': 'Jumping over the tree'}]

相关问题