2011-07-06 84 views
27

我是使用jackson庫的新手。配置Jackson反序列化單引號(無效)JSON

我想這樣做[見下文],它是拋出錯誤。

String x="{'candidateId':'k','candEducationId':1,'activitiesSocieties':'Activities for cand1'}"; 
ObjectMapper mapper = new ObjectMapper(); 

try { 
    JsonNode df=mapper.readValue(x,JsonNode.class); 
    int i=0; 
} catch ..... 

例外:

org.codehaus.jackson.JsonParseException: Unexpected character (''' (code 39)): was expecting double-quote to start field name 
at [Source: [email protected]; line: 1, column: 3] 
    at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:1291) 

而同樣的事情的作品,如果我取代單引號(')用雙引號(「)

+0

http://stackoverflow.com/questions/1688099/converting-json-to-java/1688182#1688182的http:// code.google.com/p/google-gson/ – rahularyansharma

回答

54

這是不是有效的JSON,但你可以告訴傑克遜允許它。就是這樣。

String x = "{'candidateId':'k','candEducationId':1,'activitiesSocieties':'Activities for cand1'}"; 
ObjectMapper mapper = new ObjectMapper(); 
mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true); 
JsonNode df = mapper.readValue(x, JsonNode.class); 
System.out.println(df.toString()); 
// output: {"candidateId":"k","candEducationId":1,"activitiesSocieties":"Activities for cand1"} 
+0

@布魯斯感謝布魯斯的建議。這正是我期待的。 –

16

字符串在JSON可能只。使用雙引號("),而不是單引號('),這是您的錯誤原因要麼;使用雙引號。

這裏的管道圖,指定有效的JSON字符串(注意,它們只可以使用雙引號封裝!)

Valid JSON Strings Pipe Diagram http://www.json.org/string.gif

(對於JSON的完整規範見json.org。)

+1

問題是我可以在javascript中使用單引號形成絕對有效的json對象,但我無法在java中解析該對象。在使用jackson解析之前,是否必須用雙引號替換單引號 –

+2

@Pipalayan:問題是單引號在JSON中* not *有效,請查看規範。你不能使用這個庫解析單引號,因爲簡單地說,你給解析器提供了無效的輸入。 –

+5

「我可以在javascript中用單引號形成絕對有效的json對象」 - JavaScript可能允許使用單引號,但這並不意味着它是有效的JSON。 –

0

這是它的作品在我的情況的方式:

var jsonString ='{"it":"Stati Uniti d'America"}'; 
jsonString =jsonString.replace("'", "\\\\u0027"); 
相關問題