更改JSON密钥以返回到API

时间:2018-10-15 10:41:37

标签: python arrays json

我从DynamoDB中读取了一个表并将其作为JSON对象发送到API。我想将JSON密钥名称(reg,dreg,stat,num)更改为(a,b,c,d)

import boto3
import json
import re

def lambda_handler(event, context):
    dynamodb = boto3.resource('dynamodb', region_name='xx-xxxxxxx-1')
    table = dynamodb.Table('_master')

    response = table.scan()
    data =[sanitize(item) for item in response['Items']]

    while 'LastEvaluatedKey' in response:
        response = table.scan(ExclusiveStartKey=response['LastEvaluatedKey'])
        data.extend(sanitize(item) for item in response['Items'])


    return {
        'statusCode': 200,
        'headers': {
            'Access-Control-Allow-Origin' : '*',
        },
        'body': json.dumps(data)
    }

def sanitize(item):
    item['dreg'] = item['dreg'].rstrip('\r\n')

    return item

JSON对象是:

[{"reg": "29-Oct-18", "dreg": "31-Dec-99", "stat": "R", "num": "xob13020"}, {"reg": "29-Oct-18", "dreg": "31-Dec-99", "stat": "R", "num": "oxb03873"}]

我想将JSON密钥名称(reg,dreg,stat,num)更改为(a,b,c,d)

2 个答案:

答案 0 :(得分:2)

只需使用正确的键名创建一个新的字典即​​可。例如:

[ { (k+'1') : v for k,v in sanitize(item).items() } for item in response['Items']]

(但也许选择一个更好的命名约定...。)

答案 1 :(得分:1)

首先将json加载到字典中

>>> jsonobj = '[{"reg": "29-Oct-18", "dreg": "31-Dec-99", "stat": "R", "num": "xob13020"}, {"reg": "29-Oct-18", "dreg": "31-Dec-99", "stat": "R", "num": "oxb03873"}]'
>>> import json
>>> json.loads(jsonobj)
[{u'stat': u'R', u'num': u'xob13020', u'reg': u'29-Oct-18', u'dreg': u'31-Dec-99'}, {u'stat': u'R', u'num': u'oxb03873', u'reg': u'29-Oct-18', u'dreg': u'31-Dec-99'}]
>>> listdata = json.loads(jsonobj)

然后遍历字典列表

>>> [item for item in listdata]
[{u'stat': u'R', u'num': u'xob13020', u'reg': u'29-Oct-18', u'dreg': u'31-Dec-99'}, {u'stat': u'R', u'num': u'oxb03873', u'reg': u'29-Oct-18', u'dreg': u'31-Dec-99'}]
>>> [{key:value for key,value in item.iteritems()} for item in listdata]
[{u'stat': u'R', u'num': u'xob13020', u'reg': u'29-Oct-18', u'dreg': u'31-Dec-99'}, {u'stat': u'R', u'num': u'oxb03873', u'reg': u'29-Oct-18', u'dreg': u'31-Dec-99'}]

具有字典数据结构中键的映射,

>>> key_value_map = {'stat': 'c', 'num': 'd', 'reg': 'a', 'dreg': 'b'}

您可以更改键值!

>>> [{key_value_map[key]:value for key,value in item.iteritems()} for item in listdata]
[{'a': u'29-Oct-18', 'c': u'R', 'b': u'31-Dec-99', 'd': u'xob13020'}, {'a': u'29-Oct-18', 'c': u'R', 'b': u'31-Dec-99', 'd': u'oxb03873'}]