首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -从JSON获取数据

Python -从JSON获取数据
EN

Stack Overflow用户
提问于 2018-02-23 16:31:19
回答 3查看 75关注 0票数 0

我正在使用API从外部源获取JSON数据,并且不确定如何从JSON中获取特定的元素。

代码语言:javascript
复制
json_data = json.loads(resp.text) #resp.text is the response from the API call
print(json_data)

打印以下内容(原始输出为单行/平面输出,因此我已格式化以使其更具可读性)

代码语言:javascript
复制
[
{'version': {
    'rowVersion': 2044}, 
    'name': 'Administrator', 
    'permissions': [
                        {'path': 'Activity/Cancel All', 'name': 'Activity/Cancel All'}, 
                        {'path': 'Activity/View All', 'name': 'Activity/View All'}, 
                        {'path': 'Audit Log/Edit', 'name': 'Audit Log/Edit'}, 
                        {'path': 'Audit Log/View', 'name': 'Audit Log/View'}
                    ], 
    'id': 1, 
    'permissionPaths': ['Activity/Cancel All', 'Activity/View All', 'Audit Log/Edit', 'Audit Log/View'], 
    'displayName': 'Administrator'
}, 

{'version': {
    'rowVersion': 964033}, 
    'name': 'ViewOnly', 
    'permissions': [
                        {'path': 'Activity/View All', 'name': 'Activity/View All'}, 
                        {'path': 'Audit Log/View', 'name': 'Audit Log/View'}, 
                    ], 
    'id': 4, 
    'permissionPaths': ['Activity/View All', 'Audit Log/View'] 
    'displayName': 'ViewOnly'
}
]

以下是

代码语言:javascript
复制
for ROLES in json_data:
    print(str(ROLES["name"]))

指纹:

代码语言:javascript
复制
Administrator
ViewOnly 

到目前为止,还不错..。但是,我希望输出是角色和权限名称,类似于.

代码语言:javascript
复制
Administrator, Activity/Cancel All
Administrator, Activity/View All
Administrator, Audit Log/Edit
Administrator, Audit Log/View
ViewOnly, Activity/View All
ViewOnly, Audit Log/View

请告诉我如何在Python中实现这一点。谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-23 16:35:33

这会有帮助的。

代码语言:javascript
复制
# -*- coding: utf-8 -*-

json_data = [
{'version': {
    'rowVersion': 2044},
    'name': 'Administrator',
    'permissions': [
                        {'path': 'Activity/Cancel All', 'name': 'Activity/Cancel All'},
                        {'path': 'Activity/View All', 'name': 'Activity/View All'},
                        {'path': 'Audit Log/Edit', 'name': 'Audit Log/Edit'},
                        {'path': 'Audit Log/View', 'name': 'Audit Log/View'}
                    ],
    'id': 1,
    'permissionPaths': ['Activity/Cancel All', 'Activity/View All', 'Audit Log/Edit', 'Audit Log/View'],
    'displayName': 'Administrator'
},

{'version': {
    'rowVersion': 964033},
    'name': 'ViewOnly',
    'permissions': [
                        {'path': 'Activity/View All', 'name': 'Activity/View All'},
                        {'path': 'Audit Log/View', 'name': 'Audit Log/View'},
                    ],
    'id': 4,
    'permissionPaths': ['Activity/View All', 'Audit Log/View'],
    'displayName': 'ViewOnly'
}
]

for ROLES in json_data:
    for n in ROLES["permissions"]:
        print(ROLES["name"], n["name"])

输出:

代码语言:javascript
复制
('Administrator', 'Activity/Cancel All')
('Administrator', 'Activity/View All')
('Administrator', 'Audit Log/Edit')
('Administrator', 'Audit Log/View')
('ViewOnly', 'Activity/View All')
('ViewOnly', 'Audit Log/View')
票数 1
EN

Stack Overflow用户

发布于 2018-02-23 16:41:00

这一任务有许多解决方案。下一节展示了列表理解的用法。

代码语言:javascript
复制
for role in json_data:
    print("\n".join(["{role.name}, {permission.name}".format(role=role, permission=permission) for permission in role.permissions]))

还可以添加额外的for-循环。

代码语言:javascript
复制
for role in json_data:
    for permission in role.permissions:
        print("{role.name}, {permission.name}".format(role=role, permission=permission))
票数 0
EN

Stack Overflow用户

发布于 2018-02-23 16:47:31

这是我的建议,它允许您通过一行样式代码在列表中获得所需的内容。如果需要,for循环仅用于打印列表中的每个元素:

代码语言:javascript
复制
myList = ["{0}, {1}".format(ROLES["name"], perm["name"]) for ROLES in json_data for perm in ROLES['permissions']]
for i in myList:
    print(i)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48952350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档