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

时间:2017-10-26 01:45:51

标签: python json

这是我试图在程序中解析的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不支持这些功能。

请建议我更好的方法。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

使用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的迭代器。