【问题标题】:AWS Lambda Java return string with slashesAWS Lambda Java 返回带有斜杠的字符串
【发布时间】:2018-05-20 10:53:45
【问题描述】:

我在

之后从 Lambda 返回字符串有问题
JSONObject.toString

作为回报,我有

"{\"Key2\":\"Value2\",\"Key1\":\"Value1\"}" 

而不是

"{"Key2":"Value2","Key1":"Value1"}"

有人可以解释如何排除这些斜线吗?

【问题讨论】:

  • 这与 AWS 或 Lambda 有什么关系?
  • 这只是因为字符串是从 Lambda 返回的,我假设是使用 AWS。

标签: java json aws-lambda


【解决方案1】:

如果你真的需要删除它们...

yourstring.replace("\\", "");

但是,如果您将响应视为字符串,则那些“愚蠢的斜线”是必要的,因为它们会转义您的 " 字符。具体来说,如果没有这些,您的编译器将表现如下:

"{"     // is a string
Key2    // Not known by Java
":"     // is a string
Value2  // Not known by Java
","     // is a string
Key1    // Not known by Java
":"     // is a string
Value1  // Not known by Java
"}"     // is a string

通过使用反斜杠转义 " 字符,您向编译器提及它不应被视为字符串的结尾或开头。因此,要求它只考虑第一个和最后一个"

【讨论】:

    【解决方案2】:

    我以前在 JavaScript 中做过类似的事情。如果您根本不序列化对象,那么 AWS API Gateway 应该会为您处理好它。如果您的 Lambda 返回如下内容:

    // ...
    context.done(null, {
        id: i.id,
        last_name: i.last_name,
        gender: i.gender
    });
    

    ...那么您的 API 响应将如下所示:

    {
        "id": 1,
        "first_name": "Chris",
        "gender": "male"
    }
    

    【讨论】:

      【解决方案3】:

      不要在您的项目中序列化您的对象。如here 所述,AWS Lambda 将为您处理对象序列化。只需返回一个对象!

      例如

      //return type is an object not a string
      public SomeObject handleRequest(Object input, Context context) {
      ...
      }
      

      【讨论】:

        猜你喜欢
        • 2011-10-04
        • 1970-01-01
        • 1970-01-01
        • 2022-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多