第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

使用 java 在沒有 pojo 的情況下使用給定的鍵解析復(fù)雜的 json 和 xml

使用 java 在沒有 pojo 的情況下使用給定的鍵解析復(fù)雜的 json 和 xml

躍然一笑 2022-12-07 14:58:10
我的要求是解析大量后端響應(yīng),這些響應(yīng)可以是 json 或 xml。我現(xiàn)在不知道他們的反應(yīng)結(jié)構(gòu)。所以,我必須以這樣的方式編寫一個(gè) Java 工具,我的工具應(yīng)該能夠根據(jù)配置文件解析響應(yīng),這將由服務(wù)團(tuán)隊(duì)在運(yùn)行我的工具之前進(jìn)行配置,因?yàn)樗麄儗⒌竭_(dá)知道這些值,他們將不得不通過我的工具檢索。例如,如果后端 json 或 xml 響應(yīng)如下所示,并且我的配置為 Employee.details.referenced[0].type,則通過工具檢索的值應(yīng)該是“客戶支持”。我將無法使用 pojo 之類的東西,它與后端響應(yīng)耦合,因?yàn)槲也恢篮蠖隧憫?yīng),我的同一個(gè)工具應(yīng)該適用于不同的后端,它們以不同的結(jié)構(gòu)輸出響應(yīng):杰森:{    "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 解析器。但是,似乎所有人都必須提前知道后端響應(yīng)。
查看完整描述

2 回答

?
智慧大石

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超3個(gè)贊

另一位海報(bào)已經(jīng)指出了杰克遜圖書館,但我想補(bǔ)充一下我的想法:

Jackson 能夠?qū)?a String(或任何其他幾個(gè) I/O 源)直接解析為JsonNode

String json = backEndProvider.fetch(); // example call
JsonNode node = new ObjectMapper().readTree(json);

然后,您可以JsonNode使用其.get()方法訪問結(jié)果的子項(xiàng):

JsonNode child = node.get("childKey");

此外,可以使用多種轉(zhuǎn)換方法訪問終端值。例如,如果您知道child是文本,則可以child通過以下方式獲取 的值:

String childValue = child.asText();

另請參閱這篇 Baeldung 文章。

從這里,您可以將用戶的輸入字符串(比如Employee.details.referenced[0].type)解析為鍵數(shù)組(例如["Employee", "details", "referenced[0]", "type"])并遞歸訪問您的根元素,直到您獲取足夠的值,并在每個(gè)階段檢查鍵是否為數(shù)組訪問操作。如果您沒有任何類型信息,則需要從您的參考解析器返回 aJsonNode或 an 。Object

對于諸如 之類的數(shù)組訪問,referenced[0]請注意ArrayNodeinhertitsObjectNode及其方法被覆蓋以使用.get()int

請注意,上面的解決方案與 Jackson 的XmlMapper.


查看完整回答
反對 回復(fù) 2022-12-07
?
神不在的星期二

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊

Jackson可以將 JSON 和 XML 解析為Map<String, Object>. 值是類型化的Object,因?yàn)槌?code>String屬性之外,它可以是List或者也Map可以代表 JSON/XML 子樹



查看完整回答
反對 回復(fù) 2022-12-07
  • 2 回答
  • 0 關(guān)注
  • 129 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號