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

如何使用python从JSON中提取特定字段和值?,python,json,python-3.x,Python,Json,Python 3.x,我正在迭代一个JSON,我想从这个对象中提取以下字段: 身份证 开放日 使用者 票务状态 结束日期 我拥有的数据结构如下所示: 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

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

  • 身份证
  • 开放日
  • 使用者
  • 票务状态
  • 结束日期
  • 我拥有的数据结构如下所示:

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

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

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

    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的数据(或其他任何人的数据)


    编辑:通过构造只显式地从指定的键中选择的新dict,可以选择新字典中将包含哪些键/值对:

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

    提示:没有所谓的“JSON”。您的数据结构是一个包含普通字典的普通列表。您可以像访问任何其他列表或词典的数据一样访问它们的数据。但是,我如何才能获得词典的每个键和值,并将它们作为一个整体进行排列呢?至于有许多单独的词典,它们的名称只因用户名不同而不同,请参见第页的Tigerhawk的答案。TLDR是:“不要这样做。相反,把你所有的值都存储在字典里。”一个观察:我有John P的所有数据,但我有所有的键和值。难道不可能只获取键和值ID、打开日期、用户、票证状态、结束日期吗?有很多方法可以做到这一点,但最简单的方法可能是只遍历所需的键,然后只添加它们。编辑。