2013-07-12 229 views
3

場景:解析問題,當一個JSON字符串生成Java對象

我使用下面的代碼來解碼JSON字符串用它來生成對象。

enter image description here

{"av":{"tid":"1000","sslist":[{"ss":{"ssId":"1","ssName":"Test ss "name one"}},{"ss":{"ssId":"2","ssName":"Test ss name two"}}],"hl":{"lc":0}}} 

現在,我的sslist數百元素和所有在第一ss元素失敗,因爲一個血腥"ssName

但是,當String在createJsonParser()方法的最開始解析時會引發此錯誤。

問:

我只想忽略錯誤傾向節點和正確的節點的其他百進行。 有沒有其他方法可以做到這一點?

代碼:

import com.fasterxml.jackson.databind.ObjectMapper; 
import com.fasterxml.jackson.core.JsonFactory; 
import com.fasterxml.jackson.core.JsonParser; 
import com.fasterxml.jackson.databind.JsonNode; 

public class JsonReader { 

     private void readJsonMethodThree(String jsonString) throws JsonParseException, IOException{ 

      ObjectMapper mapper   = new ObjectMapper(); 
      JsonFactory  factory   = mapper.getJsonFactory(); 
      JsonParser  jsonParser  = factory.createJsonParser(jsonString); 
      JsonNode  jsonNode  = mapper.readTree(jsonParser); 

     } 

} 

例外:

Exception in thread "main" com.fasterxml.jackson.core.JsonParseException: Unexpected character ('n' (code 110)): was expecting comma to separate OBJECT entries 
at [Source: [email protected]5d; line: 1, column: 69] 
+0

在將每個屬性的文本作爲JSON發送到瀏覽器之前,您應該轉義它們中的文本。 – crush

+0

謝謝。但是我在閱讀時正在尋找一種方法來處理它。 – namalfernandolk

+4

不,你的JSON生產者應該照顧這個 – epoch

回答

3
yourjsonstring = yourjsonstring.replaceAll("\"name", "name"); 

,或者使用更通用的圖案,這只是例子。

+1

雖然您的解決方案可能解決當前問題,但實際的解決方案是讓生產者生成有效的JSON。 – hd1

+0

完全同意。但是這樣的解決方案之前提到過,問題仍然沒有解決。可能不存在生產者的訪問權限,或者已經創建了很多bad-json消費者。所以這樣的化妝品解決方案可能是唯一一個:) – Danila

+0

謝謝你Danila!我也試過這個。但是有很多Bad字符導致這個錯誤。所以,我認爲我不應該是第一個面對這樣的問題,並且可能有一個預定義的庫/包來處理這些問題。這是我問的。我試圖在不觸摸服務器代碼的情況下做到這一點。但現在我正在重新考慮服務器端實現,因爲沒有其他選擇。 – namalfernandolk

0

當JSON的數據類型與cassandra中聲明的數據類型不匹配時,您也可能會遇到此錯誤。具體來說,檢查JSON值是否應該是一個list類型而不是一個單例。