我正在编写一个接收SQS队列对象的Lambda函数。SQS将json对象作为字符串值发送给SQS。
当我在Lambda中接收到请求时,AWS已经将其包装成一个新的JSON,由于JSON是一个字符串值,因此它将成为无效的JSON。
{"uuid ":"someuuid"}
{
"Records": [
{
"messageId": "somemesasgeid",
"receiptHandle": "MessageReceiptHandle",
"body": {
"Message":"{"uuid":"someUuid"}"
},
"attributes": {
"ApproximateReceiveCount": "1",
"SentTimestamp": "sometimestamp",
"SenderId": "someid",
"ApproximateFirstReceiveTimestamp": "sometimestamp"
},
"messageAttributes": {},
"md5OfBody": "somebody",
"eventSource": "aws:sqs",
"eventSourceARN": "someARN",
"awsRegion": "eu-west-1"
}
]
}
现在body.message不是有效的JSON。我尝试将它解析为一个原始值,比如如何使用Jackson在对象中包含原始JSON?但它总是抱怨,它在期待逗号分隔对象的地方找到了一个u。
既然我不能将原始json发送到SQS并且必须对其进行字符串化,那么如何将其解析为一个可以获得json消息的对象呢?
我尝试创建一个pojo并尝试上面的链接,但jackson一直抱怨消息变量。
private Response HandleServiceRequest(Map<String, Object> input) {
List<String> records = (List<String>) input.get("Records");
for(String r : records) {
SqsMessage m = objectMapper.readValue(r, SqsMessage.class);
}
}
public class SqsMessage {
// all other values
SqsBody body;
// getters/setters
}
public class SqsBody {
// all other values
@JsonProperty("Message")
private Object message;
// getters/setters
@JsonRawValue
public String getMessage() {
message == null ? null : message.toString();
}
public void setMessage(Object message){
this.message = message;
}
}
基本问题是“message”:“{”uuid“:”someuuid“}”
不是有效的json,因此Jackson无法解析这一部分。从json的角度来看,“message”
的值是“{”
,因此下面的UUID
会导致错误。
为了处理这个问题,您需要正确地转义嵌套的json,使其看起来像Jackson的任何其他字符串,即您希望得到如下内容:
"Message":"{\"uuid\":\"someUuid\"}"
这里“message”
的值为“{\”uuid\“:\”someuuid\“}”
,因此Jackson可以获取该字符串并进一步处理它(将其放入字符串或取消转义并进行解析)。
这意味着您不应该尝试在解析端解决这个问题,而应该在生成端解决这个问题,即在创建handleserviceRequest(...)
的请求体的地方。
我以前使用过对嵌套类的改装,但我目前尝试使用的api有这样一种结构: 请求正文: 和一个类似的响应机构。 请注意,bigNestedClass是一个字符串。 我为请求和响应创建了不同的pojo类。但是,创建嵌套的BigNestedClass会使该字段如预期的那样填充为JSON对象,而不是JSON字符串。我在解析响应时也遇到了同样的问题。 我的问题:有没有一种改造方法可以将嵌套类编码、解析为字符串?
服务器js 使用body parser中间件、把手和express 路线 客户 当记录我得到一个JSON字符串 {'{"满意":"文本1","改进":"文本2","评级":0.7}': '' } 我试着把这个字符串解析成一个对象。当我这样做时,我会收到这个错误消息 那么如何将字符串解析为对象呢? 通常我会执行。
我已经试过各种方法来解决这个问题了。但没有成功。 我有几节这样的课 在这种情况下,T可以是任何对象,并且应该可以在运行时解析。 Jackson真的无法将json反序列化为泛型类型吗?
问题内容: 我正在将我的第一个应用程序构建在骨干网中,我想知道哪种方法是解析具有多个级别的json的最佳模式。这是一个简单的json小示例: 要打印它,我正在使用collection并在主干中查看,如下所示:COLLECTION: 这就是称为视图的两个视图,因为我想要的每个酒店都有不同的视图: 我的模板是: 但是不打印名称,我也尝试过: 但是我无法打印值名称,该怎么做?谢谢 问题答案: 首先,JS
我有映射: 和一些文件: 等等。 我尝试进行查询: 未找到任何结果。如果我尝试将同一查询按字段与其他类型(不是字符串,也没有原始子字段)一起使用,它会起作用。我应该如何为这种情况编写查询?谢谢 P、 美国字段“FieldA”具有子字段raw,因为我需要同时分析和不分析此字段
你知道这是怎么回事吗?