我从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)
答案 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'}]