匹配的JSON键

2024-04-27 02:29:46 发布

您现在位置:Python中文网/ 问答频道 /正文

当数据来自以下格式的JSON时,我可以将其转换为Python中的字典。但是,信息的顺序并不总是相同的。例如,first_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_name总是在0,尽管事实并非如此。Python保存数据,它把电子邮件放在名字应该在的地方。我试图找到一种方法来验证JSONname键在提交数据之前是否与同一db字段对应。你知道吗


Tags: 数据name信息jsonfielddbdata字典
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。你知道吗

假设

data = {"field_data":[{
  "name": "first_name", 
  "values": [
    "Joe"
  ]
},
{
  "name":"last_name",
  "values": [
    "Example"
  ]
},
{
  "name": "email", 
  "values": [
    "joe@example.com"
  ]
}]}

这是一种相当简单的方法来遍历所有字段,如果您找到了与您要查找的内容相匹配的内容,只需将其赋值。因此,为所需数据的其余部分添加更多if

for thing in data['field_data']:
    if thing['name'] == 'first_name':
        first_name = thing['values'][0]

相关问题 更多 >