从JSON响应中删除\ r-Python

时间:2018-10-11 11:46:08

标签: python json regex python-3.x

以下代码将查询该表并生成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,但是没有用

2 个答案:

答案 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