在Python中从JSON获取键

5
我有一个 API,其响应类似于以下 json 数据:
{
"a":1,
"b":2,
"c":[
     {
     "d":4,
     "e":5,
     "f":{
         "g":6
         }
     }
    ]
}

我该如何编写一个Python程序,让它能够返回键值['d', 'e', 'g']。我尝试了以下代码:
jsonData = request.json() #request is having all the response which i got from api
c = jsonData['c']
for i in c.keys():
    key = key + str(i)
print(key)

1
"c" 是一个列表。尝试使用 c[0].keys()。 - helloV
你需要 ['d','e','g'] 还是 ['d','e','f'] 键? - Andriy Ivaneyko
键的名称为 ['d','e','g'],而非其值 ['d','e','g']。 - Sagar
抱歉,评论中有拼写错误。我已经更新了上面的评论。 - Andriy Ivaneyko
2个回答

7

返回仅包含非字典值的键的函数。

jsonData = {
    "a": 1,
    "b": 2,
    "c": [{
        "d": 4,
        "e": 5,
        "f": {
            "g": 6
        }
    }]
}


def get_simple_keys(data):
    result = []
    for key in data.keys():
        if type(data[key]) != dict:
            result.append(key)
        else:
            result += get_simple_keys(data[key])
    return result

print get_simple_keys(jsonData['c'][0])

为了避免使用递归,请将 result += get_simple_keys(data[key]) 改为 result += data[key].keys()

1
谢谢Andriy.. 它给了我['e', 'd', 'f']。我想要的是'g'而不是'f'。 我认为我需要再加一个循环。 - Sagar
是的,但这不是最好的方法... 需要没有递归的解决方案吗? - Andriy Ivaneyko
是的,这将非常有帮助。再次感谢@Andriy的努力。 - Sagar
为什么这个程序按照 ['e','d','g'] 的顺序获取,而不是 ['d','e','g'] 的顺序呢?虽然这样也可以,但只是出于好奇。 - Sagar
Python字典实际上是哈希表。这意味着键的顺序不能保证或指定。如果您需要对它们进行排序,请在迭代之前使用sorted(data.keys()) - Andriy Ivaneyko

0

试试这个,

dct = {
    "a":1,
    "b":2,
    "c":[
         {
         "d":4,
         "e":5,
         "f":{
             "g":6
             }
         }
        ]
    }
k=dct["c"][0]
for key in k.keys(): 
    print key

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接