是否遍历作为嵌套字典列表返回的JSON对象?
我对JSON的经验非常有限,但我有一个工作函数,它返回一个包含三个值的JSON列表,最后一个值是一个嵌套字典。我想通过挑出嵌套字典,然后重新格式化来操作列表 以下是JSON数据:是否遍历作为嵌套字典列表返回的JSON对象?,json,python-3.x,list,loops,dictionary,Json,Python 3.x,List,Loops,Dictionary,我对JSON的经验非常有限,但我有一个工作函数,它返回一个包含三个值的JSON列表,最后一个值是一个嵌套字典。我想通过挑出嵌套字典,然后重新格式化来操作列表 以下是JSON数据: {'progress': 100, 'time': 421.0, 'values': {'sctpFlowsConcurrent': '0', 'tcpClientEstablishRate': '0', 'ethRxFrameDataRate': '0', 'tcpServerEstablished'
{'progress': 100,
'time': 421.0,
'values': {'sctpFlowsConcurrent': '0',
'tcpClientEstablishRate': '0',
'ethRxFrameDataRate': '0',
'tcpServerEstablished': '12425694',
'appAttempted': '12373847',
'tcpServerClosedByReset': '0',
'ethTxFrameRate': '0',
'appAttemptedRate': '0',
'appUnsuccessfulRate': '0',
'concurrentAppFlows': '2',
'rxFrames': '99042605',
'ethTxFrameDataRate': '0',
'appSuccessfulRate': '0',
'appIncomplete': '12373847',
'tcpFlowsConcurrent': '2',
'ethRxFrames': '99248556',
'tcpClientClosed': '12373845',
'tcpClosedByReset': '0',
'ethRxFrameRate': '0',
'totalFlowsConcurrent': '2',
'ethTxFrames': '99249661',
'txFrames': '99146687',
'appUnsuccessful': '0',
'txFrameDataRate': '0',
'appAborted': '0',
'tcpServerCloseRate': '0',
'tcpAttempted': '12477920',
'tcpAttemptRate': '0',
'rxFrameDataRate': '0',
'tcpClientEstablished': '12373847',
'rxFrameRate': '0',
'tcpServerEstablishRate': '0',
'tcpClientCloseRate': '0',
'txFrameRate': '0',
'superFlowsConcurrent': '0',
'tcpClientClosedByReset': '0',
'tcpServerClosed': '12373840',
'udpFlowsConcurrent': '0',
'appSuccessful': '0'}}
它是无格式的,这就是为什么我想操纵它
以下是我尝试过的:
def send_data():
bps = BPS(settings.ip, settings.ixia_user, settings.ixia_pass, settings.logger)
run_id = bps.runTest(modelname='test_name', group=settings.__bps_group)
send_content = bps.getRealTimeStatistics('run_id')
for v in send_content:
if isinstance(v, dict):
purpose = 'do stuff'
我得到的错误来自发送内容中v的:声明E TypeError:“NoneType”对象不可编辑
send\u content=bps.getRealTimeStatistics('run\u id')
调用一个函数,返回前面显示的JSON数据。我不确定如何处理此数据类型
def getRealTimeStatistics(self, runid, enableRequestPrints=False):
service = 'https://' + self.ipstr + '/api/v1/bps/tests/operations/getRealTimeStatistics'
jheaders = {'content-type': 'application/json'}
jdata = json.dumps({'runid': runid})
r = self.session.post(service, data=jdata, headers=jheaders, verify=False)
if (enableRequestPrints):
self.pretty_print_requests(r)
if (r.status_code == 200):
return r.json().get('rts')
我是一个数据结构的noob,如果这是一个简单的修复,我道歉。非常感谢 非常感谢您的帮助!我尝试了@moctarjallo建议的方法,添加了一个步骤,一切似乎都很好
def send_ixia_data(bps, run_id, test_name):
nombre = "Details for " + test_name
x = bps.getRealTimeStatistics(run_id)
jsonx = json.loads(x)
var4 = jsonx['values'] #dict of 'values'
因此,现在var4只保存列表中的嵌套字典。我不确定jsonx=json.loads(x)
是如何解决我的问题的,但现在一切正常了。:) 显示的JSON数据不是列表。但是您得到的错误表明getRealTimeStatistics
返回None
。如果JSON数据不是列表,那么它是字典吗?我知道数据中有一个字典,但是数据本身也是一个dict吗?你在这里展示的数据是一个python字典
,有三个键,第三个是另一个字典:要得到它,你只需说data['values']
假设你的数据被称为data
我尝试了你的方法@moctarjallo,但是我遇到了这个错误E TypeError:字符串索引必须是整数
。但是,在控制台中,不使用print语句调用该变量可以正常工作。。。但我不明白为什么它不能在脚本中工作。我已经格式化了你的数据,再看一遍,也许你现在就可以看到了。但我不明白你是如何得到这个错误的:这就像你在访问一个列表
,而这里只有字典。。