我的要求是解析大量后端響應,這些響應可以是 json 或 xml。我現在不知道他們的反應結構。所以,我必須以這樣的方式編寫一個 Java 工具,我的工具應該能夠根據配置文件解析響應,這將由服務團隊在運行我的工具之前進行配置,因為他們將到達知道這些值,他們將不得不通過我的工具檢索。例如,如果后端 json 或 xml 響應如下所示,并且我的配置為 Employee.details.referenced[0].type,則通過工具檢索的值應該是“客戶支持”。我將無法使用 pojo 之類的東西,它與后端響應耦合,因為我不知道后端響應,我的同一個工具應該適用于不同的后端,它們以不同的結構輸出響應:杰森:{ "Employee": [ { "id": "12345678", "service": "ps", "origin": { "address": { "addressLocality": "India" } }, "destination": { "address": { "addressLocality": "US" } }, "status": { "timestamp": "2019-01-29T21:02:49Z", "location": { "address": { "addressLocality": "Germany" } }, "Code": "xyz", "description": "Services" }, "details": { "references": [ { "number": "0003030891", "type": "customer-support" } ] } } ]}XML:<?xml version="1.0" encoding="UTF-8"?><root> <Employee> <element> <destination> <address> <addressLocality>US</addressLocality> </address> </destination> <details> <references> <element> <number>0003030891</number> <type>customer-support</type> </element> </references> </details> <id>12345678</id> <origin> <address> <addressLocality>India</addressLocality> </address>我試圖檢查 java 和 xml saxparser 中的 json 解析器。但是,似乎所有人都必須提前知道后端響應。
2 回答

智慧大石
TA貢獻1946條經驗 獲得超3個贊
另一位海報已經指出了杰克遜圖書館,但我想補充一下我的想法:
Jackson 能夠將 a String
(或任何其他幾個 I/O 源)直接解析為JsonNode
:
String json = backEndProvider.fetch(); // example call JsonNode node = new ObjectMapper().readTree(json);
然后,您可以JsonNode
使用其.get()
方法訪問結果的子項:
JsonNode child = node.get("childKey");
此外,可以使用多種轉換方法訪問終端值。例如,如果您知道child
是文本,則可以child
通過以下方式獲取 的值:
String childValue = child.asText();
另請參閱這篇 Baeldung 文章。
從這里,您可以將用戶的輸入字符串(比如Employee.details.referenced[0].type
)解析為鍵數組(例如["Employee", "details", "referenced[0]", "type"]
)并遞歸訪問您的根元素,直到您獲取足夠的值,并在每個階段檢查鍵是否為數組訪問操作。如果您沒有任何類型信息,則需要從您的參考解析器返回 aJsonNode
或 an 。Object
對于諸如 之類的數組訪問,referenced[0]
請注意ArrayNode
inhertitsObjectNode
及其方法被覆蓋以使用.get()
int
請注意,上面的解決方案與 Jackson 的XmlMapper
.
添加回答
舉報
0/150
提交
取消