Python 匹配JSON键

Python 匹配JSON键,python,json,Python,Json,当数据以下面的格式来自JSON时,我可以将其转换为Python中的字典。但是,信息的顺序并不总是相同的。例如,first\u name,我假设始终为0。然而,当我得到数据时,根据使用的形式,可能在2位置。因此,现在不再将first_name存储在右侧的db字段中,而是存储在email字段中 我的问题是:如何使用name键和value确保值与db字段匹配 { "name": "first_name", "values": [ "Joe" ] }, { "name":"la

当数据以下面的格式来自JSON时,我可以将其转换为Python中的字典。但是,信息的顺序并不总是相同的。例如,
first\u name
,我假设始终为0。然而,当我得到数据时,根据使用的形式,可能在2位置。因此,现在不再将
first_name
存储在右侧的db字段中,而是存储在
email
字段中

我的问题是:如何使用
name
键和value确保值与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\u name
将始终处于0,即使情况并非如此。Python保存数据,它把电子邮件放在名字应该在的地方。在提交数据之前,我试图找到一种方法来验证JSON
name
键是否与同一个db字段相对应。

您应该通过在数组上迭代来查找具有所需名称的元素,而不是依赖于您指出的脆弱顺序

例如:

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
函数查找具有所需名称的元素。然后,在示例的最底部,我们使用它检索
名字
姓氏
电子邮件

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]

通过适当地访问字典?是否缺少方括号?您拥有的JSON无效。@juanpa.arrivillaga这只是一个示例。@IgnacioVazquez Abrams我需要确保在提交表单时,
名称
键与我的数据库模型匹配,然后提交相应的
@joshlsullivan我不确定您在说什么。你能不能详细介绍一下你的例子,或者至少向我们展示一下不起作用的代码,你得到的结果,以及你期望的结果?我知道这将是一个非常简单的解决方案。非常感谢。我喜欢你把它变成一个函数。我在一个Django班工作,不知道如何在那里工作。我会继续努力,但这正是我想要的。非常感谢。