匹配JSON密钥

时间:2016-07-11 01:04:32

标签: python json

当数据来自以下格式的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字段对应。

2 个答案:

答案 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_namelast_nameemail

答案 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]