Как проанализировать неэкранированный JSON, полученный в качестве входных данных лямбда-функцией? - PullRequest
0 голосов
/ 04 февраля 2019

Я извлекаю данные с помощью веб-инструмента для очистки (Parsehub).После завершения извлечения Parsehub отправляет информацию об этих данных (в формате JSON) в Amazon Lambda, которую я использую как веб-крючок.Но этот JSON не был правильно экранирован, и, следовательно, Lambda выдает ошибку (говоря, что не может проанализировать тело запроса).Как мне избежать строки JSON, чтобы лямбда не выдавала ошибку?Я также протестировал эту функцию с помощью eclipse.

Я использовал простые типы Java в качестве входных данных (https://docs.aws.amazon.com/lambda/latest/dg/java-programming-model-req-resp.html). Я также пытался использовать POJO (https://docs.aws.amazon.com/lambda/latest/dg/java-handler-io-type-pojo.html) и реализацию потока байтов (https://docs.aws.amazon.com/lambda/latest/dg/java-handler-io-type-stream.html) в качестве входных данных, но он по-прежнему выдает ошибку синтаксического анализа json.

Это часть моего кода Lambda Handler:

public class LambdaFunctionHandler implements RequestHandler<Object, String> {

    @Override
    public String handleRequest(Object input, Context context) {
        System.out.println("input - " + input);
        return "response";
    }
}


Это JSON, Parsehubотправляет в Lambda:

{
    "run_token": "I have removed this",
    "status": "complete",
    "md5sum": "90dc9753513a248502414e8d5345a6de /phfiles/ty6qie7-ut5C.gz ",
    "custom_proxies": "",
    "data_ready": 1,
    "template_pages": {},
    "start_time": "2019-01-30T11:01:58",
    "owner_email": "I have removed this",
    "webhook": "https://api endpoint of lambda function",
    "is_empty": false,
    "project_token": "I have removed this",
    "end_time": "2019-01-30T11:02:19",
    "start_running_time": "2019-01-30T11:01:59",
    "options_json": "{"recoveryRules": "{}", "rotateIPs": false, "sendEmail": true, "allowPerfectSimulation": false, "ignoreDisabledElements": true, "webhook": "https://api endpoint of lambda function", "outputType": "csv", "customProxies": "", "preserveOrder": false, "startTemplate": "main_template", "allowReselection": false, "proxyDisableAdblock": false, "proxyCustomRotationHybrid": false, "maxWorkers": "0", "loadJs": true, "startUrl": "https://address of the website from which data is extracted", "startValue": "{}", "maxPages": "0", "proxyAllowInsecure": false}",
    "start_value": "{}",
    "start_template": "main_template",
    "pages": 2,
    "start_url": "https://address of the website from which data is extracted"
}


Это вывод в моих журналах Cloudwatch:

Lambda invocation failed with status: 400. Lambda request id: eecd695e-61e7-47d9-bc27-04628c99e158
Execution failed: Could not parse request body into json: Unrecognized token 'run_token': was expecting ('true', 'false' or 'null')
at [Source: [B@36f6b2e9; line: 1, column: 11]


Это вывод в моей консоли Eclipse:

Invoking function...
==================== INVOCATION ERROR ====================
com.amazonaws.services.lambda.model.InvalidRequestContentException: Could not parse request body into json: Unexpected character ('r' (code 114)): was expecting comma to separate Object entries
at [Source: [B@1ade7b2b; line: 15, column: 21] (Service: AWSLambda; Status Code: 400; Error Code: InvalidRequestContentException; Request ID: b46bf0b4-4bb2-4bc0-aa13-81457349153c)

Как мы видим, часть JSON "options_json": "{" recoveryRules ":" {} ", ....... не экранирована.можно изменить json, отправленный parsehub. Единственное, что я могу сделать, это Lambda.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...