回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>因此,我正在使用Cisco Prime Infrastructure的API,我已经穷途末路了。我正在编写的脚本应该从getReport操作中获取一个报告,对其进行解码(不确定这个词是否正确),然后将其放入一个数据帧中。问题是,有垃圾包裹着它。下面是json响应的一个示例:</p>
<pre><code>{
"mgmtResponse" : {
"@requestUrl" : "https://localhost/webacs/api/v4/op/reportService/getReport?reportTitle=MyReport",
"@responseType" : "operation",
"@rootUrl" : "https://localhost/webacs/api/v4/op",
"reportDataDTO" : [ {
"childReports" : {
"childReport" : [ ]
},
"dataRows" : {
"dataRow" : [ {
"entries" : {
"entry" : [ {
"attributeName" : "String value",
"dataValue" : "String value",
"displayName" : "String value"
}, {
"attributeName" : "Another string value",
"dataValue" : "Another string value",
"displayName" : "Another string value"
} ]
}
}, {
"entries" : {
"entry" : [ {
"attributeName" : "String value",
"dataValue" : "String value",
"displayName" : "String value"
}, {
"attributeName" : "Another string value",
"dataValue" : "Another string value",
"displayName" : "Another string value"
} ]
}
} ]
},
"descriptorName" : "String value",
"pageCount" : 15,
"pageIndex" : 15,
"reportDate" : "String value",
"reportName" : "String value",
"reportTitle" : "String value",
"reportUrl" : "String value"
} ]
}
}
</code></pre>
<p>我希望我的脚本只使用嵌套在“dataRows”下的信息,但我不知道该怎么做。到目前为止,我有:</p>
<pre><code>response = rq.get(url, auth=(cpi_user,cpi_password), verify=False, timeout = 300)
print(response.status_code)
if (response.status_code == rq.codes.ok):
responseJSON = response.json()
rogue_ap_flatten = json_normalize(responseJSON)
print (rogue_ap_flatten)
rogues = pd.DataFrame(rogue_ap_flatten)
print(rogues.head(50))
return rogues
</code></pre>
<p>我得到的回报是:</p>
<pre><code> mgmtResponse.@requestUrl ... mgmtResponse.reportDataDTO
0 https://prime/webacs/api/v4/op/reportS... ... [{'childReports': {'childReport': []}, 'dataRo...
[1 rows x 4 columns]
</code></pre>
<p>我试过只使用请求中的.text方法,我试过使用另一个json扁平化库(json_flatte),并带有排除某些键的选项,我正在考虑以某种方式在python中使用sed。它不需要为其他报告工作,只有一个报告,所以我有一些余地来指定任何特定的键或诸如此类的内容。你们怎么解决这个问题</p>