如何使用python从JSON中提取特定字段和值?

时间:2017-09-05 19:04:44

标签: python json python-3.x

我正在迭代JSON,我想从这个对象中提取以下字段:

  1. 我,
  2. Open_date
  3. 用户
  4. Ticket_status
  5. End_date
  6. 我拥有的数据结构如下:

    filtered_data = 
    [{'id': 1021972, 'Aging_Deferred_Transferred': '', 'Aging_Open_Issue': '0.94', 
    'Aging_Un_investigated_Issue': '0.94', 'User': 'John P.', 'ModifiedOn': '2017-09-04 21:29:59', 
    'Open_date':'2017-08-04 01:34:18','End_date':'2017-09-05 00:29:01',
    'Ticket_status':'Transferred'},{'id': 1036722, 'Aging_Deferred_Transferred': '', 'Aging_Open_Issue': '0.12', 
    'Aging_Un_investigated_Issue': '0.01', 'User': 'John P.', 'ModifiedOn': '2017-09-04 21:29:59', 
    'Open_date':'2017-09-01 00:34:18','End_date':'',
    'Ticket_status':'Researching'},{'id': 1015621, 'Aging_Deferred_Transferred': '', 'Aging_Open_Issue': '0.99', 
    'Aging_Un_investigated_Issue': '0.11', 'User': 'John D.', 'ModifiedOn': '2017-06-05 12:19:59', 
    'Open_date':'2017-01-01 00:00:18','End_date':'2017-09-01 20:20:57',
    'Ticket_status':'Closed'}]
    

    我想返回一个数据结构,例如Dictionary(如果你认为有一个更好的数据结构来实现我的目标,请提及它)如下:

    dict_user_john_p = {'ID':1021972,'Open_date':'2017-08-04 01:34:18','Ticket_status':'Transferred','End_date':'2017-09-05 00:29:01',
    'ID':1036722,'Open_date':'2017-09-01 00:34:18','Ticket_status':'Researching','End_date':''}
    
    dict_user_john_D = {'ID':1015621,...,'End_date':'1015621'}
    

    如何提取上述特定字段并将其作为另一种数据结构(字典)返回?

1 个答案:

答案 0 :(得分:2)

filtered_data是一个普通列表,因此您可以使用普通索引或迭代从中访问单个词典。您可以将每个元素放入一个新的字典中,并按用户名键入:

filtered_data = [{'id': 1021972, 'Aging_Deferred_Transferred': '', 'Aging_Open_Issue': '0.94', 
'Aging_Un_investigated_Issue': '0.94', 'User': 'John P.', 'ModifiedOn': '2017-09-04 21:29:59', 
'Open_date':'2017-08-04 01:34:18','End_date':'2017-09-05 00:29:01',
'Ticket_status':'Transferred'},{'id': 1036722, 'Aging_Deferred_Transferred': '', 'Aging_Open_Issue': '0.12', 
'Aging_Un_investigated_Issue': '0.01', 'User': 'John P.', 'ModifiedOn': '2017-09-04 21:29:59', 
'Open_date':'2017-09-01 00:34:18','End_date':'',
'Ticket_status':'Researching'},{'id': 1015621, 'Aging_Deferred_Transferred': '', 'Aging_Open_Issue': '0.99', 
'Aging_Un_investigated_Issue': '0.11', 'User': 'John D.', 'ModifiedOn': '2017-06-05 12:19:59', 
'Open_date':'2017-01-01 00:00:18','End_date':'2017-09-01 20:20:57',
'Ticket_status':'Closed'}]

data_by_user = {}
for d in filtered_data:
    data_by_user[d["User"]] = d

print(data_by_user["John P."])

现在,您可以通过使用名称索引新词典来访问John P的数据(或其他任何人的数据)。

编辑:您可以通过构建明确仅从您指定的键中选择的新词典来选择新词典中的键/值对:

data_by_user = {}
for d in filtered_data:
    data_by_user[d["User"]] = {k:d[k] for k in ("id", "Open_date", "User", "Ticket_status", "End_date")}