【问题标题】:Remove \r from JSON response - Python从 JSON 响应中删除 \r - Python
【发布时间】:2018-10-11 11:46:07
【问题描述】:

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

【问题讨论】:

  • 您的输入数据中有 \r,因此您必须修复输入数据,而不是 JSON 输出。
  • 很遗憾无法解决这个问题。

标签: python json regex python-3.x


【解决方案1】:

如何从我的 json reposnse 中删除 \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'])

【讨论】:

  • 列表索引必须是整数或切片,而不是 str: TypeError - 出现此错误
  • 没注意到response 是一个列表。修复了
【解决方案2】:
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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多