当数据来自以下格式的JSON时,我可以将其转换为 Python 中的字典。但是,信息并不总是以相同的顺序。例如,first_name
,我认为总是为0.但是,当我得到数据时,根据使用的形式,可能在2位置。现在,不是将first_name
存储在正确的数据库字段中,而是存储在email
字段中。
以下是我的问题:如何使用name
键确保值与db字段匹配?
{
"name": "first_name",
"values": [
"Joe"
]
},
{
"name":"last_name",
"values": [
"Example"
]
},
{
"name": "email",
"values": [
"joe@example.com"
]
}
一如既往地谢谢你! : - )
更新 以下是我访问代码的方法:
first_name = data['field_data'][0]['values'][0].encode('utf-8')
last_name = data['field_data'][1]['values'][0].encode('utf-8')
email = data['field_data'][2]['values'][0].encode('utf-8')
telephone = data['field_data'][3]['values'][0].encode('utf-8')
我假设first_name
总是在 0 ,即使情况并非如此。 Python保存数据,它将电子邮件放在first_name应该的位置。在提交数据之前,我试图找到一种方法来验证JSON name
密钥是否与同一个db字段对应。
答案 0 :(得分:2)
而不是依赖于你所指出的那个易碎的顺序,你应该通过在数组上迭代来实际寻找具有你想要名字的元素。
例如:
data = {
'field_data' : [
{
"name": "first_name",
"values": [
"Joe"
]
},
{
"name":"last_name",
"values": [
"Example"
]
},
{
"name": "email",
"values": [
"joe@example.com"
]
}
]
}
def get_values(name):
for data_element in data.get('field_data'):
if data_element.get('name') == name:
return data_element.get('values')
return None
if __name__ == "__main__":
first_name = get_values('first_name')[0]
last_name = get_values('last_name')[0]
email = get_values('email')[0]
print 'first_name: ' + first_name
print 'last_name: ' + last_name
print 'email: ' + email
在此示例中,get_values
函数查找具有所需名称的元素。然后,在示例的最底部,我们使用它来检索first_name
,last_name
和email
。
答案 1 :(得分:0)
假设
data = {"field_data":[{
"name": "first_name",
"values": [
"Joe"
]
},
{
"name":"last_name",
"values": [
"Example"
]
},
{
"name": "email",
"values": [
"joe@example.com"
]
}]}
这是迭代所有字段的相当简单的方法,如果找到匹配的内容,只需指定它即可。因此,为剩余的所需数据添加更多ifs
for thing in data['field_data']:
if thing['name'] == 'first_name':
first_name = thing['values'][0]