从json.loads列表中提取数据

时间:2017-08-13 17:16:21

标签: python

我正在尝试提取一个特定的列或层,不知道你想要什么叫它..这是一个json对象里面我已经转换为我认为是分层列表但我有两个问题,我的检查是否"返回"在列表中没有找到任何东西,即使在打印jsonb时我可以看到它在列表中,我的第二个问题是如何从图层中提取某个列...在这种情况下我需要数字" 43343243& #34;出第二层并放入一个变量我尝试用jsonb引用它["返回"] [0]我得到了一个关键错误..

我的代码:

def worker(pairtxt):    
    while (1 < 2):            
        balanceobject = requests.post(urlauth, headers=headers, data=paybytes)
        json_stringb = str(balanceobject.content, 'utf8')
        jsonb = json.loads(json_stringb)
        print(jsonb)
        if "return" in jsonb: #fails
           print(jsonb["return"]["0"]) # key error
           print(jsonb["return"]) # prints everything even layers under the number

我的jsonb打印输出

{'success': 1, 'return': {'43343243': {'status': 0, 'pair': 'rgeg',
 'type': 'sell', 'amount': 0.01000002, 'rate': 1.0,
 'timestamp_created': 1502642258}}}

2 个答案:

答案 0 :(得分:1)

因为43343243是键而非值,所以需要获取返回键:

jsonb = {'success': 1, 'return': {'43343243': {'status': 0, 'pair': 'rgeg', 'type': 'sell', 'amount': 0.01000002, 'rate': 1.0, 'timestamp_created': 1502642258}}}
numberWanted = list(jsonb['return'].keys())[0]
print(numberWanted) # => 43343243

答案 1 :(得分:0)

我认为你将输出jsonb看作一个列表(这不是真的)。 jsonb是一本字典。要验证您是否可以执行此操作:

print(type(jsonb))

字典具有键值对。 成功是关键,1是价值。 return是一个键,值是另一个字典。

{
    '43343243': {
                'status': 0, 
                'pair': 'rgeg', 
                'type': 'sell', 
                'amount': 0.01000002, 
                'rate': 1.0, 
                'timestamp_created': 1502642258
            }
}

如果您想访问43343243,则可以执行jsonb['return']['43343243']