Передача Json как пути результата в aws Step Функции с использованием Java без кавычек - PullRequest
0 голосов
/ 08 мая 2018

Я использую лямбда-функцию в пошаговых функциях. Функция написана на Java. Я хочу передать несколько значений, как в этот вопрос .

Код функции выглядит так:

public String handleRequest(S3Event event, Context context) {

//other code...

String eventJsonString = event.toJson();
JsonParser parser = new JsonParser();
JsonObject eventJson = parser.parse(eventJsonString).getAsJsonObject();
eventJson.addProperty("value1", value1);
eventJson.addProperty("value2", value2);

String output = eventJson.toString().replace("\\", "");
logger.log("output: " + output);
return output;
}

Вход в CloudWatch соответствует ожидаемому:

output:
{
    "Records": [
        {
            "awsRegion": "eu-west-1",
            "eventName": "ObjectCreated:Put",
            "eventSource": "aws:s3",
            "eventTime": "1970-01-01T00:00:00.000Z",
            "eventVersion": "2.0",
        .
        .
        .
}

Но когда я захожу в консоль пошаговых функций, я вижу, что результат был передан с экранированными кавычками:

"{\"Records\":[{\"awsRegion\":\"eu-west-1\",\"eventName\":\"ObjectCreated:Put\",\"eventSource\":\"aws:s3\",\"eventTime\":\"1970-01-01T00:00:00.000Z\",\"eventVersion\":\"2.0\",...}

Этот вывод не может быть обработан конечным автоматом. Я не уверен, является ли эта проблема единственной Java или также связана с aws.

Как передать строку json с неэкранированными кавычками, чтобы ее могли использовать следующие компоненты?

1 Ответ

0 голосов
/ 05 сентября 2018

Вместо того, чтобы возвращать строковое значение, вы можете вернуть объект или что-то наподобие карты (используя здесь пример карты)

public Map<String, String> handleRequest(Map<String, Object> input, Context context) {

    String brs = "42";
    String rsm = "123";

    Map<String, String> output = new HashMap<>();
    output.put("brs", brs);
    output.put("rsm", rsm);

    return output;
}

Таким образом, если вы включите (в определении состояния)

 "ResultPath": "$.taskresult",

Вы получите этот результат в выводе (вместе с другими элементами):

"taskresult": {
  "brs": "42",
  "rsm": "123"
}
...