【发布时间】:2022-01-18 05:59:27
【问题描述】:
我目前正在使用 Tenable.io 进行一些 API 工作,但在选择子字符串时遇到了一些问题。我正在发送扫描历史记录请求,API 以 JSON 格式的所有扫描的连续字符串进行响应。我得到的响应是一个非常大的连续数据字符串,我需要选择一些子字符串(几个值),并将其复制到一个列表中(只是现在)。将数据放入列表并不是我遇到的问题 - 我需要一些认真的帮助来选择我需要的子字符串。每次扫描都有以下属性:
- 身份证
- 状态
- is_archived
- 目标
- scan_uuid
- 重新索引
- time_start(unix 格式)
- time_end(unix 格式)
其中每一个都有一个值/布尔值(见下文)。我需要一种方法来从字符串中提取"id":、"scan_uuid:" 和"time_start": 之后的值(暂时将其放入列表中)。
我想在没有string.index 的情况下执行此操作,因为如果响应长度发生变化,这可能会破坏脚本。每天还有一个新的扫描,所以响应的总长度会改变。由于数据的性质,我想理想的解决方案是指定一个条件,在"id":、"scan_uuid:" 和 "time_start": 之后选择 x 个字符,并将它们附加到一个列表中,使用输出看起来像:
scan_id_10_response = ["12345678", ""15b6e7cd-447b-84ab-84d3-48a62b18fe6c", "1639111111", etc, etc]
字符串如下 - 为了简单起见,我只包含了 4 次扫描的数据。出于安全原因,我也更改了值,但值的长度和格式是相同的。
scan_id_10_response = '{"pagination":{"offset":0,"total":119,"sort":[{"order":"DESC","name":"start_date"}],"limit":100},"history":[\
{"id":12345678,"status":"completed","is_archived":false,"targets":{"custom":false,"default":null},"visibility":"public","scan_uuid":"15b6e7cd-447b-84ab-84d3-48a62b18fe6c","reindexing":null,"time_start":1639111111,"time_end":1639111166},\
{"id":23456789,"status":"completed","is_archived":false,"targets":{"custom":false,"default":null},"visibility":"public","scan_uuid":"8a468cff-c64f-668a-3015-101c218b68ae","reindexing":null,"time_start":1632222222,"time_end":1632222255},\
{"id":34567890,"status":"completed","is_archived":false,"targets":{"custom":false,"default":null},"visibility":"public","scan_uuid":"84ea995a-584a-cc48-e352-8742a38c12ff","reindexing":null,"time_start":1639333333,"time_end":1639333344},\
{"id":45678901,"status":"completed","is_archived":false,"targets":{"custom":false,"default":null},"visibility":"public","scan_uuid":"48a95366-48a5-e468-a444-a4486cdd61a2","reindexing":null,"time_start":1639444444,"time_end":1639444455}\
]}'
【问题讨论】:
标签: python select split substring extract