Поэтому я пытаюсь разделить массив json с некоторыми метаданными и добавить метаданные к каждому объекту в массиве:
{
"@version":"1",
"metadata":{"key1":"value1","key2":"value2"},
"messages":[{"msg":{...}},{"msg":{...}}, ... ]
}
к
{
"type":"msg",
"data":{
"@version":"1",
"metadata":{"key1":"value1","key2":"value2"},
"msg":{...}
}
}
У меня есть следующееВерблюжий маршрут, который почти работает:
from("direct:kafkaMsg")
.routeId("rKafkaMsg")
.log(DEBUG, "JSON: ${body}")
.setHeader("@version").jsonpath("$.@version")
.setHeader("metadata").jsonpathWriteAsString("$.metadata") // not writing as string
.split().jsonpathWriteAsString("$.messages..msg")
.setHeader("msgId", jsonpath("$.msgNo"))
.setHeader("kafka.KEY", simple("${header.msgId}"))
.setBody(simple("{\"type\":\"msg\","
+ "\"data\":{\"@version\":\"${header.@version}\",\"metadata\":${header.metadata},"
+ "\"msg\":${body}}}"))
.log(DEBUG, "body: ${body}")
.log(INFO, "msgPush: writing msg to kafka - msgId: ${header.msgId}")
.setProperty(Exchange.CHARSET_NAME, constant("UTF-8"))
.to("kafka:sometopic?partitioner=" + DefaultPartitioner.class.getName())
.end();
Но Json, который я действительно получаю, выглядит так:
{
"type":"msg",
"data":{
"@version":"1",
"metadata":{key1="value1",key2="value2"}, // wrong. This looks like mapToString
"msg":{...}
}
}
Когда у меня был .split().jsonpath("$.messages..msg")
ранее, объект 'msg' также был неверноотформатированный в выводе, но jsonpathWriteAsString()
помог в этом случае.Я тоже попробовал jsonpath("$.metadata", String.class)
но это не помогло.
Кто-нибудь знает, как это исправить?Благодаря.