以下代码将查询该表并生成JSON作为输出
import boto3
import json
import re
def lambda_handler(event, context):
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('master')
response = table.scan()
data = response['Items']
while 'LastEvaluatedKey' in response:
response = table.scan(ExclusiveStartKey=response['LastEvaluatedKey'])
data.extend(response['Items'])
return {
'statusCode': 200,
'headers': {
'Access-Control-Allow-Origin' : '*',
},
'body': json.dumps(data)
}
我的JSON响应包含一个\ r。
[
{
"r_dt": "29-Oct-18",
"de_dt": "31-Dec-99\r",
"v_status": "R",
"v_num": "M13020"
},
{
"r_dt": "29-Oct-18",
"de_dt": "31-Dec-99\r",
"v_status": "R",
"v_num": "O03873"
}
}
如何从JSON响应中删除\ r?我尝试了JSON.loads / RegEx,但是没有用
答案 0 :(得分:1)
如何从json仓库中删除\ r。我尝试了json.loads / regex ,没用
您的输入数据包含\r
,因此它以JSON响应结尾。因此,您必须修复输入数据,而不是“修复” JSON输出。如果不可能,则必须尽早清除数据,在 将其序列化为JSON之前:
def sanitize(item):
item['de_dt'] = item['de_dt'].rstrip('\r')
# OR
item['de_dt'] = item['de_dt'].replace('\r', '')
return item
# ...
while 'LastEvaluatedKey' in response:
response = table.scan(ExclusiveStartKey=response['LastEvaluatedKey'])
data.extend(sanitize(item) for item in response['Items'])
答案 1 :(得分:0)
import boto3
import json
import re
def lambda_handler(event, context):
dynamodb = boto3.resource('dynamodb', region_name='ap-southeast-1')
table = dynamodb.Table('dsl_vehicle_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['dereg_dt'] = item['dereg_dt'].rstrip('\r\n')
# OR
#item['dereg_dt'] = item['dereg_dt'].replace('\r', '')
return item