【问题标题】:How can I extract just one value from a json output?如何从 json 输出中仅提取一个值?
【发布时间】:2021-07-01 16:04:36
【问题描述】:

我正在使用 python requests 从 API 检索数据,我只需要过滤掉一个值。

我是 JSON 新手,希望有人能帮帮我。

下面是我的代码和返回的输出。但是,我只需要“motTests”下的“expiryDate”的第一个案例,在这种情况下是“2022.04.05”。我怎样才能过滤掉这个?提前致谢。

我的代码:

import requests

url = "https://beta.check-mot.service.gov.uk/trade/vehicles/mot-tests"
headers = {
    'Accept': 'application/json+v6',
    'x-api-key': 'my_api_key'
}

resp = requests.get(url, headers=headers, params={'registration': 'YD14YCP'}
)

print(resp.content)

我收到的输出是:

b'[{"registration":"YD14YCP","make":"BMW","model":"530","firstUsedDate":"2014.03.01","fuelType":"Diesel","primaryColour":"White","vehicleId":"YRVs92Gaddsa65jq2zD2Q==","registrationDate":"2014.03.01","manufactureDate":"2014.03.01","engineSize":"2993","motTests":[{"completedDate":"2021.03.25 14:09:25","testResult":"PASSED",**"expiryDate":"2022.04.05"**,"odometerValue":"63823","odometerUnit":"mi","motTestNumber":"5570263656619","odometerResultType":"READ","rfrAndComments":[]},{"completedDate":"2020.03.20 10:30:55","testResult":"PASSED","expiryDate":"2021.04.05","odometerValue":"57548","odometerUnit":"mi","motTestNumber":"8165169314","odometerResultType":"READ","rfrAndComm
    ents":[{"text":"Rear Brake pad(s) wearing thin (1.1.13 (a) (ii))","type":"ADVISORY","dangerous":false},{"text":"Front Tyre worn close t
    o legal limit/worn on edge  both slightly worn on outer edge (5.2.3 (e))","type":"ADVISORY","dangerous":false}]},{"completedDate":"2019
    .04.06 09:34:32","testResult":"PASSED","expiryDate":"2020.04.05","odometerValue":"47558","odometerUnit":"mi","motTestNumber":"403589926
    352","odometerResultType":"READ","rfrAndComments":[]},{"completedDate":"2018.04.06 08:03:08","testResult":"PASSED","expiryDate":"2019.04.05","odometerValue":"41101","odometerUnit":"mi","motTestNumber":"946286448569","odometerResultType":"READ","rfrAndComments":[]},{"com
    pletedDate":"2017.02.28 14:42:55","testResult":"PASSED","expiryDate":"2018.02.28","odometerValue":"28624","odometerUnit":"mi","motTestN
    umber":"37263578588","odometerResultType":"READ","rfrAndComments":[{"text":"Offside Rear Tyre worn close to the legal limit  2-3mm (4.
    1.E.1)","type":"ADVISORY","dangerous":false}]}]}]'

【问题讨论】:

  • 试试resp.json(),然后你就可以像普通的python dicts/lists一样使用json了

标签: python json filtering


【解决方案1】:

获取请求后获取所需数据的正确方法是获取值:

上面的代码:

import requests

url = "https://beta.check-mot.service.gov.uk/trade/vehicles/mot-tests"
headers = {
    'Accept': 'application/json+v6',
    'x-api-key': 'my_api_key'
}

现在,

resp.json().get('KEY_ONE').get('KEY_TWO') # and so on

类似的东西

【讨论】:

    【解决方案2】:

    你可以这样做只打印你想要的值:

    cookieJar = resp.cookies.get_dict()
    print(cookieJar["registration"])
    

    [输出]

    YD14YCP
    

    【讨论】:

    • 对我不起作用,我得到:KeyError: 'registration'
    【解决方案3】:

    试试这个:

    import json
    raw = '[{"registration":"YD14YCP","make":"BMW","model":"530","firstUsedDate":"2014.03.01","fuelType":"Diesel","primaryColour":"White","vehicleId":"YRVs92Gaddsa65jq2zD2Q==","registrationDate":"2014.03.01","manufactureDate":"2014.03.01","engineSize":"2993","motTests":[{"completedDate":"2021.03.25 14:09:25","testResult":"PASSED","expiryDate":"2022.04.05","odometerValue":"63823","odometerUnit":"mi","motTestNumber":"5570263656619","odometerResultType":"READ","rfrAndComments":[]},{"completedDate":"2020.03.20 10:30:55","testResult":"PASSED","expiryDate":"2021.04.05","odometerValue":"57548","odometerUnit":"mi","motTestNumber":"8165169314","odometerResultType":"READ","rfrAndComm ents":[{"text":"Rear Brake pad(s) wearing thin (1.1.13 (a) (ii))","type":"ADVISORY","dangerous":false},{"text":"Front Tyre worn close t o legal limit/worn on edge both slightly worn on outer edge (5.2.3 (e))","type":"ADVISORY","dangerous":false}]},{"completedDate":"2019 .04.06 09:34:32","testResult":"PASSED","expiryDate":"2020.04.05","odometerValue":"47558","odometerUnit":"mi","motTestNumber":"403589926 352","odometerResultType":"READ","rfrAndComments":[]},{"completedDate":"2018.04.06 08:03:08","testResult":"PASSED","expiryDate":"2019.04.05","odometerValue":"41101","odometerUnit":"mi","motTestNumber":"946286448569","odometerResultType":"READ","rfrAndComments":[]},{"com pletedDate":"2017.02.28 14:42:55","testResult":"PASSED","expiryDate":"2018.02.28","odometerValue":"28624","odometerUnit":"mi","motTestN umber":"37263578588","odometerResultType":"READ","rfrAndComments":[{"text":"Offside Rear Tyre worn close to the legal limit 2-3mm (4. 1.E.1)","type":"ADVISORY","dangerous":false}]}]}]'
    
    res = json.loads(response)
    print(res[0]["motTests"][0]["expiryDate"])
    

    [输出]

    '2022.04.05'
    

    【讨论】:

    • 这行得通,我只需要使用 json.loads(resp.text)
    猜你喜欢
    • 2021-08-23
    • 2022-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-19
    • 1970-01-01
    • 2021-01-12
    • 2020-03-29
    相关资源
    最近更新 更多