繁体   English   中英

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

[英]Extracting data from JSON depending on other parameters

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

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

当使用json_name["list"][0]["id"] ,显然返回123456789 有没有一种方法可以指示"name""needed-value"这样我就可以得到987654321的回报?

例如:

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"]

处理此问题的最佳方法是将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
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')))

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM