如何在python中通过键作为变量从json中获取值

2024-09-29 19:31:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从下面的json获取一些数据

[
    {
        "company": "XYZ",
        "companyAddress": "PQR",
        "staffDetails": [
            {
                "employeeCount": {
                    "jobLevel1": "9",
                    "jobLevel2": "10",
                    "jobLevel3": "11"
                },
                "otherStaff": {
                    "jobLevel1": "99",
                    "jobLevel2": "100"
                }
            }
        ]
    },
    
    {
        "company": "XXX",
        "companyAddress": "YYY",
        "staffDetails": [
            {
                "employeeCount": {
                    "jobLevel1": "9",
                    "jobLevel2": "10",
                    "jobLevel3": "11"
                },
                "otherStaff": {
                    "jobLevel1": "99",
                    "jobLevel2": "100"
                }
            }
        ]
    }
]

我要获取的数据是可配置的。 e、 下面是我想要的2个细节

config.properties

[details]
reqparameters=staffDetails.employeeCount.joblevel1 ,staffDetails.otherStaff.joblevel2

myPython代码如下所示-

   import configparser
    import json
    config=configparser.RawConfigParser()
    config.read('config.properties')
    parameters=config.get('details','reqparameters')
    splitedValue=responseDetails.split(",")
    resp='''    [
            {
                "company": "XYZ",
                "companyAddress": "PQR",
                "staffDetails": [
                    {
                        "employeeCount": {
                            "jobLevel1": "9",
                            "jobLevel2": "10",
                            "jobLevel3": "11"
                        },
                        "otherStaff": {
                            "jobLevel1": "99",
                            "jobLevel2": "100"
                        }
                    }
                ]
            },
            
            {
                "company": "XXX",
                "companyAddress": "YYY",
                "staffDetails": [
                    {
                        "employeeCount": {
                            "jobLevel1": "9",
                            "jobLevel2": "10",
                            "jobLevel3": "11"
                        },
                        "otherStaff": {
                            "jobLevel1": "99",
                            "jobLevel2": "100"
                        }
                    }
                ]
            }
        ]'''
    #x = json.loads(resp, object_hook=lambda d: SimpleNamespace(**d))
    x = json.loads(resp)
    
    for property in splitedValue:
     for jNode in x:
       print(jNode[property])
       print(jNode.property)

尝试了两种打印方式(jNode[property])&;打印(jNode.property)和x=json.loads(resp,object_hook=lambda d:SimpleNamespace(**d))但它不起作用由于我的输入是可配置的,所以我无法使用jNode对其进行编码,因此需要使用从属性文件中读取的变量属性动态地对其进行编码


Tags: 数据configjsonpropertyrespcompanyloadscompanyaddress
1条回答
网友
1楼 · 发布于 2024-09-29 19:31:10

这不是Python中JSON处理如何访问您需要使用的部分:

jNode['staffDetails'][0]['employeeCount']['jobLevel1']

您的数据中有一个问题,配置文件显示joblevel1,但json中的键是jobLevel1(大写L) 另一个问题是staffDetails是一个列表,所以你知道它总是一个元素吗?还是会更多

直接在Python中这样做会很麻烦,例如

In [564]:
    ...: for config in splitedValue:
    ...:     for company in x:
    ...:         data = company
    ...:         for node in config.split('.'):
    ...:             if isinstance(data, type(list)):
    ...:                 data = data[0]
    ...:             data = data[node]
    ...:         print(f"company: {company['company']} {config}: {data}")
    ...:
company: XYZ staffDetails.employeeCount.jobLevel1: 9
company: XXX staffDetails.employeeCount.jobLevel1: 9
company: XYZ staffDetails.otherStaff.jobLevel2: 100
company: XXX staffDetails.otherStaff.jobLevel2: 100

就我个人而言,我会考虑对JSON和配置文件进行更改,以使它们更好地协同工作

相关问题 更多 >

    热门问题