是否遍历作为嵌套字典列表返回的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'

我对JSON的经验非常有限,但我有一个工作函数,它返回一个包含三个值的JSON列表,最后一个值是一个嵌套字典。我想通过挑出嵌套字典,然后重新格式化来操作列表

以下是JSON数据:

{'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语句调用该变量可以正常工作。。。但我不明白为什么它不能在脚本中工作。我已经格式化了你的数据,再看一遍,也许你现在就可以看到了。但我不明白你是如何得到这个错误的:这就像你在访问一个
列表
,而这里只有字典。。