代码之家  ›  专栏  ›  技术社区  ›  Prasanna Nandakumar

从JSON响应中删除\r-Python

  •  0
  • Prasanna Nandakumar  · 技术社区  · 6 年前

    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 回复  |  直到 6 年前
        1
  •  1
  •   el.pescado - нет войне    6 年前

    如何从json resose中删除\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'])
    
        2
  •  0
  •   Prasanna Nandakumar    6 年前
    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