用多个"级别解析Json"用Python

时间:2017-12-26 17:15:23

标签: python json parsing

我试图从api调用解析json文件。

我发现这段代码符合我的需要,并尝试根据我的需要进行调整:

import math, urllib2, json, re


def download():
    graph = {}
    page = urllib2.urlopen("http://fx.priceonomics.com/v1/rates/?q=1")
    jsrates = json.loads(page.read())

    pattern = re.compile("([A-Z]{3})_([A-Z]{3})")
    for key in jsrates:
        matches = pattern.match(key)
        conversion_rate = -math.log(float(jsrates[key]))
        from_rate = matches.group(1).encode('ascii','ignore')
        to_rate = matches.group(2).encode('ascii','ignore')
        if from_rate != to_rate:
            if from_rate not in graph:
                graph[from_rate] = {}
            graph[from_rate][to_rate] = float(conversion_rate)
    return graph

我把它变成了:

import math, urllib2, json, re


def download():
    graph = {}
    page = urllib2.urlopen("https://bittrex.com/api/v1.1/public/getmarketsummaries")
    jsrates = json.loads(page.read())

    for pattern in jsrates['result'][0]['MarketName']:
    for key in jsrates['result'][0]['Ask']:
        matches = pattern.match(key)
        conversion_rate = -math.log(float(jsrates[key]))
        from_rate = matches.group(1).encode('ascii','ignore')
        to_rate = matches.group(2).encode('ascii','ignore')
        if from_rate != to_rate:
            if from_rate not in graph:
                graph[from_rate] = {}
            graph[from_rate][to_rate] = float(conversion_rate)
    return graph

现在的问题是json中存在多个级别"结果> 0,1,2等"

json screenshot

for key in jsrates['result'][0]['Ask']:

我希望零可以是任何数字,我不知道这是否清楚。 所以我可以得到所有的要价以匹配他们的市场名称。

我缩短了代码,因此它不会发布太长的帖子。

由于 PS:对不起英语,不是我的母语。

1 个答案:

答案 0 :(得分:0)

您可以遍历返回的所有结果值,忽略无意义的数字索引:

for result in jsrates['result'].values():
    ask = result.get('Ask')
    if ask is not None:
        # Do things with your ask...