在python中访问嵌套JSON文件中的值

最后发布: 2017-10-26 01:45:51


问题

这是我试图在我的程序中解析的cred.json文件。

{"accounts":[
        {
                "id":"1",
                "username":"user1",
                "password":"password1"
        },
        {
                "id":"2",
                "username":"user2",
                "password":"password2"
        }
]}

这是我用它的代码。 这有效,但我知道这不是最好的方法。

import json

with open('cred.json') as cred_file:
        parsed_json = json.load(cred_file)
        cred_file.close

        for x in range(0,2):
                user = parsed_json["accounts"][x]["username"]
                password = parsed_json["accounts"][x]["password"]
                print user, ":", password

我想做同样的事情,没有指定循环的范围。 当我尝试使用iteritems()get()它会给我一个错误,说unicode不支持这些函数。

请建议我更好的方法来做到这一点。

python json
回答

parsed_json已加载整个dict,其中包含一个键“account”,其值为帐户列表,如dicts。 因此,而是执行范围+索引查找,直接遍历帐户列表:

for account in parsed_json["accounts"]:
    user = account["username"]
    password = account["password"]
    print user, ":", password

此外,您不需要cred_file.close (应该是cred_file.close() btw),因为它在退出with上下文后关闭。 正确的方法是:

with open('cred.json') as cred_file:
    parsed_json = json.load(cred_file)

for account in parsed_json["accounts"]:
    user = account["username"]
    password = account["password"]
    print user, ":", password


回答

使用Python 3

import json
with open('cred.json') as f:
    lines_read = f.readlines()

json_str = ''.join(lines_read)
json_dict = json.loads(json_str)

for account in json_dict['accounts']:
    user = account['username']
    password = account['password']
    print(user, ':', password)

基本思想是使用python的迭代器。