2017-09-05 570 views
0

我遍历一个JSON,我想提取这个对象以下字段:如何使用python从JSON中提取特定的字段和值?

  1. 标识,
  2. Open_date
  3. 用户
  4. Ticket_status
  5. END_DATE

的我有的数据结构如下:

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'}] 

我想返回的数据结构,如词典(如果你认为有更好的数据结构实现我的目标,请提到它),如下所示:

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'} 

我如何可以提取提到的特定字段并将它们作为另一个数据结构(字典)返回?

+4

提示:你指定你可以选择哪些键/值对将在新的字典,通过构建新的类型的字典明确仅从键选择有没有“JSON”这样的东西。您的数据结构是包含普通字典的普通列表。您可以像访问任何其他列表或字典的数据一样访问其数据。 – Kevin

+0

但是我怎样才能得到字典的每个关键和价值,并把它们整理成一个? –

+0

至于有很多个人字典的名称仅因用户名而不同,请参阅Tigerhawk的回答https://stackoverflow.com/a/38972761/953482。 TLDR是:“不这样做,而是将所有的值存储在字典中” – Kevin

回答

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."]) 

现在,您可以通过索引新的字典,他们的名字进入约翰·普的数据(或其他人的数据)。


编辑:

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")} 
+0

一个观察:我已经获得了John P.的所有数据,但是我得到了所有的键和值。难道只能得到密钥和值ID,open_date,user,ticket_status,end_date吗? –

+1

有很多方法可以做到这一点,但最简单的方法可能是遍历所需的密钥,并只添加它们。编辑。 – Kevin