[英]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.