2012-10-09 19 views
3

我正在編寫一個基於REST的web服務代碼,其中xml被讀爲POST正文內容。 < REQ> J * Wt! & Gs + aGphxR </REQ>xml在json中的解碼問題org.json.JSONException:缺少';'在XML實體中

數據可能包含字母數字或符號。

我正在使用json-jena jar並將xml轉換爲java對象並讀取值。

JSONObject jsonObject = XML.toJSONObject(body); 

對於特定請求上述我正在錯誤如下 org.json.JSONException:缺少「;」在XML實體:& gs在40 [字符41行1]

請讓我知道如何轉換爲json對象沒有錯誤。

我的要求是讀取REQ標記與用戶指定的實際值(不是編碼字符串)之間的值。

+0

你是否要逃避「<" and ">」? – MadProgrammer

+0

我的請求將與< and >轉換爲相應的正確形式。 – user1332962

+0

@ user1332962 - 這裏的問題不是< and >,而是自己轉義& – Mark

回答

3

問題是供應商沒有發送XML。在XML的&開始必須以一個;

結束的正確的XML爲您的例子是要麼<REQ>J*Wt!&amp;Gs+aGphxR</REQ>通過其實體引用代替&&amp;(XML還包括&lt;&gt;<>)或可能包圍實體在CDATA部分的數據

+0

值中的&Gs不是>符號。它正在考慮爲>符號並給出錯誤信息;不見了。我需要解決方案來逃避這個錯誤,並繼續XML到JSON格式。 – user1332962

+0

缺少開始,中間和結尾處的括號:'<![CDATA [...]]>' –

+0

@ user1332962 - 你不能逃避錯誤,因爲輸入不是XML,因爲&需要後面跟着;要終止實體,所以您需要自行逃避&,而不管下面的信件是什麼。 – Mark

1

這似乎是在抱怨XML格式良好,而不是在進行轉換本身時出現任何錯誤(雖然它可能讀取XML作爲轉換的第一步,這就是爲什麼您看到一個錯誤)。

您是如何製作內容的?你應該確保它本身是格式良好的。像你的<REQ>這樣的XML元素不能只有任意文本。字符&<必須在元素內容中轉義(並且'"可能需要在屬性內容中轉義)。爲了避免需要在元素內容中跳出&<,假設您的解析器支持它們,您可以使用CDATA節,但請記住需要轉義特定的序列]]>

0

這不是有效的XML,因爲&字符是保留的。爲了得到這個工作,你可能必須像這樣逃脫它&amp;。其他保留的符號是",<>。您可以像這樣轉義它們:&quot;&lt;&gt