根据其他参数从JSON提取数据

时间:2018-12-14 18:23:14

标签: python json

根据其他参数(使用python)从JSON提取值的选项有哪些?例如,JSON:

"list": [
    {
        "name": "value",
        "id": "123456789"
    },
    {
        "name": "needed-value",
        "id": "987654321"
    }
]

使用json_name["list"][0]["id"]时显然会返回123456789。是否有一种方法可以指示"name"的值"needed-value",以便我可以得到987654321作为回报?

4 个答案:

答案 0 :(得分:1)

例如:

import json as j

s = '''
{
"list": [
    {
        "name": "value",
        "id": "123456789"
    },
    {
        "name": "needed-value",
        "id": "987654321"
    }
]
}
'''

js = j.loads(s)
print [x["id"] for x in js["list"] if x["name"] == "needed-value"]

答案 1 :(得分:0)

处理此问题的最佳方法是将json重构为单个字典。由于“名称”和“ id”是多余的,因此可以使用“名称”中的作为键,而“ id”中的值作为值来创建字典。

import json

j = '''{
    "list":[
        {
            "name": "value",
            "id": "123456789"
        },{
            "name": "needed-value",
            "id": "987654321"
        }
    ]
}'''


jlist = json.loads(j)['list']
d = {jd['name']: jd['id'] for jd in jlist}
print(d) ##{'value': '123456789', 'needed-value': '987654321'}

现在,您可以像平常一样从字典中迭代项目。

for k, v in d.items():
    print(k, v)
# value 123456789
# needed-value 987654321

并且由于现在对名称进行了哈希处理,因此与连续查询列表相比,您可以更有效地检查成员资格。

assert 'needed-value' in d

答案 2 :(得分:0)

jsn = {
    "list": [
        {
            "name": "value",
            "id": "123456789"
        },
        {
            "name": "needed-value",
            "id": "987654321"
        }
    ]
}

def get_id(list, name):
    for el in list:
        if el['name'] == name:
            yield el['id']

print(list(get_id(jsn['list'], 'needed-value')))

答案 3 :(得分:-1)

Python天生就将JSON视为字典列表。考虑到这一点,您可以调用需要返回的列表的索引,因为您知道它在列表(和子词典)中的位置。

在您的情况下,我将使用list[1]["id"]

但是,如果您不知道所需值的位置在列表中的什么位置,则可以通过以下方式运行老式的for循环:

for user in list:
    if user["name"] == "needed_value":
        return user["id"]

这是假设列表中只有一个唯一的needed_value。