将Json作为结果路径传递给aws步骤函数使用java而不转义引号

问题描述 投票:1回答:1

我在步骤函数中使用Lambda函数。该函数是用Java编写的。我想传递与this question类似的多个值。

该函数的代码如下所示:

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-string,以便它可以被以下组件使用?

java amazon-web-services aws-lambda aws-step-functions
1个回答
2
投票

您可以返回一个Object或类似Map的东西,而不是返回一个String值(这里使用Map示例)

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"
}
© www.soinside.com 2019 - 2024. All rights reserved.