python - 将来自 http 请求的 json 响应过滤为仅特定值,然后从所有结果中选择最大的“id”值
问题描述
我有一个 Python 脚本,我想在其中使用 http get 过滤 Python,并且我想仅过滤特定值的响应数据。json响应示例如下:
{
"id": "38",
"name": "Report1",
"description": "",
"reportDefinitionID": "-1",
"jobID": "105600",
"type": "csv",
"status": "Completed",
"creator": {
"id": "1",
"username": "btest",
"firstname": "bob",
"lastname": "test"
},
{
"id": "39",
"name": "Report2",
"description": "",
"reportDefinitionID": "-1",
"jobID": "113218",
"type": "csv",
"status": "Completed"
"creator": {
"id": "1",
"username": "btest1",
"firstname": "Bob",
"lastname": "test1"
},
"id": "49",
"name": "Report1",
"description": "",
"reportDefinitionID": "-1",
"jobID": "113219",
"type": "csv",
"status": "Completed"
"creator": {
"id": "1",
"username": "btest1",
"firstname": "Bob",
"lastname": "test1"
}
我想过滤上面的 json 以仅按名称显示报告。例如,如果有一个 Python 过滤器只允许我过滤名为“Report1”的报告。如果我过滤了“Report1”的名称。我希望以下将返回:
{
"id": "38",
"name": "Report1",
"description": "",
"reportDefinitionID": "-1",
"jobID": "105600",
"type": "csv",
"status": "Completed",
"creator": {
"id": "1",
"username": "btest",
"firstname": "bob",
"lastname": "test"
},
"id": "49",
"name": "Report1",
"description": "",
"reportDefinitionID": "-1",
"jobID": "113219",
"type": "csv",
"status": "Completed"
"creator": {
"id": "1",
"username": "btest1",
"firstname": "Bob",
"lastname": "test1"
}
对于脚本的最后一部分,我想比较“id”字段以显示最大值,例如 id 38 和 id 49,然后在这种情况下输出 id 49 中最大值的 json。我希望它输出
},
"id": "49",
"name": "Report1",
"description": "",
"reportDefinitionID": "-1",
"jobID": "113219",
"type": "csv",
"status": "Completed"
"creator": {
"id": "1",
"username": "btest1",
"firstname": "Bob",
"lastname": "test1"
}
对于最后一部分,我只想将 id 值“49”保存到 Python 中的变量中。
到目前为止,我所拥有的是:
response_data = response.json()
input_dict = json.dumps(response_data)
input_transform = json.loads(input_dict)
# Filter python objects with list comprehensions
sort1 = sorted([r.get("id") for r in input_transform if r.get("name") == "Report1"], reverse=True)[0]
# Print sorted JSON
print(sort1)
我更新了我的代码,现在我收到以下错误:
'str' object has no attribute 'get'
我对其进行了研究,但无法弄清楚我现在在做什么以及如何克服它。
解决方案
您需要在 listcomp 中获取 ID,如下所示:
sorted([r.get("id") for r in sample if r.get("name") == "Report1"], reverse=True)[0]
推荐阅读
- swift - UICollectionView 单元格垂直排列而不是网格
- javascript - react-boilerplate 错误:无法解析 '/Users/react-boilerplate/node_modules/xlsx-style' 中的 '../xlsx'
- reactjs - 请求数据,将其传递给另一个组件并在反应中返回
- sql - SQL 错误 - ORA-00933: SQL 命令未正确结束
- c - 尝试在字符串中定期引入空格
- jquery - 将某些内联 css 添加到父 div,如果子 div 不包含某些内联 css
- python - 无法在基于 Django 的项目的数字海洋上使用 Apache 服务器为网站提供服务
- gimp - Gimp python-fu:如何裁剪图层以进行选择
- php - 获取最低级别的php数组
- r - 关于 roxygen2 的 UTF-8 的警告