![](/img/trans.png)
[英]Read JSON Nested element using reflection without using JsonFactory or ObjectMapper
[英]Mapping ConsumerRecord to Element - What are JsonFactory and ObjectMapper equivalent for XML?
我有一個 function 接受 kafka ConsumerRecords<Object, Object> 記錄,我需要做的是從每條記錄中創建一個 Element object。
下面是 Json 實現的工作原理,我為每條記錄創建了一個 JsonNode object。
for (ConsumerRecord<Object, Object> record: records) {
KafkaMessage kafkaMsgVal = (KafkaMessage) record.value();
String rawJson = kafkaMsgVal.getMsgValue();
JsonNode jsonNode = null;
try {
JsonFactory factory = new JsonFactory();
ObjectMapper mapper = new ObjectMapper(factory);
jsonNode = mapper.readTree(rawJson);
}
}
我想做與上面相同的事情,但對於 XML。所以我相信我必須使用 Element 或 Document 而不是 JsonNode,然后使用 document.getRootElement()。 做這個的最好方式是什么? 正如您在上面看到的,我能夠簡單地使用 JsonFactory 和 Object 映射器將記錄轉換為 JsonNode,那么 XML 的等價物是什么?
以下是我要做什么的想法:
for (ConsumerRecord<Object, Object> record: records) {
KafkaMessage kafkaMsgVal = (KafkaMessage) record.value();
String rawXml = kafkaMsgVal.getMsgValue();
Element element = null;
try {
//What to do here to convert the rawXml into an Element or Document object?
}
}
您可以像使用“ObjectMapper”一樣使用XmlMapper
。 這是我測試過的示例代碼:
public static void main(String[] args) {
XmlMapper xmlMapper = new XmlMapper();
String myXML = "<cookies>" +
"<cookie><type>Chocolate</type><price>5.0</price></cookie> " +
"<cookie><type>Sugar</type><price>5.0</price></cookie>" +
"</cookies>";
try {
// Note that the readTree method returns a `JsonNode` result
JsonNode root = xmlMapper.readTree(myXML);
System.out.println(root);
} catch (IOException e) {
e.printStackTrace();
}
}
這會產生以下 output:
{"cookie":[{"type":"Chocolate","price":"5.0"},{"type":"Sugar","price":"5.0"}]}
編輯:為我使用的依賴項添加 Maven 坐標,以防萬一
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.14.1</version>
</dependency>
要從字符串中獲取“文檔”,您可以執行以下操作:
...
StringReader strReader = new StringReader(myXML);
InputSource inSource = new InputSource(strReader);
// Get a DocumentBuilder instance
DocumentBuilder docBuilder =
DocumentBuilderFactory.newInstance().newDocumentBuilder();
// Parse String to Document
Document doc = docBuilder.parse(inSource);
// Printing the 'document' element name
System.out.println(doc.getDocumentElement().getTagName());
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.