自定义格式的json.dump()?

时间:2018-01-17 23:24:52

标签: python json python-2.7

我有一个词典列表:

[  
    {  
      '_item_id1':'0002',
      '_ticket_quantity1':1,
      '_showtime_id':5635775   
    },
    {  
      '_item_id2':'0001',
      '_ticket_quantity2':1,
       '_showtime_id':5635775    
    }
]

我希望以这种格式json.dumps()

data = json.dumps({
        'ticketTypes': [{
                'showtimeId': showtime_id,
                'id': item_id1,
                'quantity': ticket_quantity1
            },
       {
                'showtimeId': showtime_id,
                'id': item_id2,
                'quantity': ticket_quantity2
           }]
    })

2 个答案:

答案 0 :(得分:0)

您可以使用list comprehension有效地构建所需的数据结构,然后将其转储:

import json

input_data = [  
    {  
      '_item_id1':'0002',
      '_ticket_quantity1':1,
      '_showtime_id':5635775   
    },
    {  
      '_item_id2':'0001',
      '_ticket_quantity2':1,
       '_showtime_id':5635775    
    }
]

json_data = [{
    'showtimeId': '_showtime_id',
    'id': d['_item_id%s' % i],
    'quantity': d['_ticket_quantity%s' % i],
} for i, d in enumerate(input_data, start=1)]

print(json.dumps({
    'ticketTypes': json_data
}))

答案 1 :(得分:0)

您要求的更多的是"翻译"或"转换"信息

但为什么你的数据是

  • " _item_id1" < --- 1?删除1?
  • " _ticket_quantity1" < --- 1?删除1?
  • " _showtime_id" < ---很好!这可能是身份吗?

  • " _item_id1" < --- 2?删除2?

  • " _ticket_quantity2" < --- 2?删除2?
  • " _showtime_id" < --- nice!

所有这些数据都是列表数据类型,因此不需要额外的1或2 如果你删除它,那么你可以使用以下

def convert2_Dict(data):
    ticketTypes = []
    for ticket in data:
       item_id = ticket[_item_id]
       ticket_quantity = ticket[_quantity]
       showtime_id = ticket[_showtime_id]
       ticketTypes.append([{"item_id":item_id}, \
                           {"ticket_quantity":ticket_quantity}, \ 
                           {"showtime_id":showtime_id}] )

     return ticketTypes

否则,它会变得有点混乱

def convert_Dict(data):
   ticketTypes = []
   for ticket in data:
      for key,value in ticket.iteritems():
         if key.find("_item_id"):             #now have to find the "string"
            item_id = ticket[_item_id]
         elif key.find("_ticket_quantity"):
            ticket_quantity = ticket[_quantity]
         elif key.find("_showtime_id")
            showtime_id = ticket[_showtime_id]
       ticketTypes.append([{"item_id":item_id}, \
                           {"ticket_quantity":ticket_quantity}, \ 
                           {"showtime_id":showtime_id}] )

    return ticketTypes