根据其他参数(使用python)从JSON提取值的选项有哪些?例如,JSON:
"list": [
{
"name": "value",
"id": "123456789"
},
{
"name": "needed-value",
"id": "987654321"
}
]
使用json_name["list"][0]["id"]
时显然会返回123456789
。是否有一种方法可以指示"name"
的值"needed-value"
,以便我可以得到987654321
作为回报?
答案 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。