2012-12-25 96 views
1

我想將json字符串轉換爲使用json lib-2.4.jar的xml,我得到以下異常。螺紋JSON XML轉換問題 - 空格

異常「主要」 nu.xom.IllegalNameException:0x20的是不是一個合法的NCName字符 在nu.xom.Verifier.throwIllegalNameException(來源不明)

我已經確定這個問題是有空白字符(0x20)在json字符串的'location'標記中,並且沒有正確解析。我已經刪除了空間並進行了一次測試,然後按預期工作。我也曾嘗試不同的方式使用StringEscapeUtils.escapeXml和一些自定義的方法,如下面

StringBuffer s1 = new StringBuffer(); 
    for (char c : value.toCharArray()) {// value is the json string 
    // System.out.println(c); 
     s1.append(c); 
     if (c == 0x20) { 
     s1.append(" "); 
     } 
     }  

,但這些方法都沒有給出有預期的結果刪除空格字符。

我也在下面附上Json字符串。

{ 
"ArticleList": [ 
{ 
"hash": "4b8e81ec1197aa071eb62238465e4cf4", 
"data":{"twitter":{"id":"276992360028712960","text":"{James 2:13} Mercy triumphs over judgment.","source":"<a href=\"http://www.abcd.com\" rel=\"nofollow\">TweetCaster<\/a>","created_at":"Fri, 07 Dec 2012 10:11:39 +0000","user":{"id":12121,"location":"{GALATIANS 2:20}","friends_count":153,"description":"Drafter#Photographer","name":"Ervin","created_at":"Sat, 28 Jan 2012 00:26:08 +0000","screen_name":"E_doubleU","id_str":"476305028","statuses_count":1212,"lang":"en","followers_count":114}},"salience":{"content":{"sentiment":0}},"klout":{"score":31},"interaction":{"id":"1e240567d69faf80e","content":"{James 2:13} because Mercy triumphs over judgment.","schema":{"version":3},"author":{"id":4763,"username":"E_doubleU","link":"http://twitter.com/","name":"Ervin wooddruff","avatar":"http://a0.twimg.com/profile_images/2921703982/13ff21c643da6b748f279baee376f58c_normal.jpeg"},"source":"TweetCaster Android","link":"http://twitter.com/","created_at":"Fri, 07 Dec 2012 10:11:39 +0000","type":"twitter"},"language":{"tag":"en","confidence":90},"demographic":{"gender":"male"}}} 
] 
} 

任何幫助就這將是非常可觀的

+0

看起來像庫中的一個bug。 'location'屬性的值是一個字符串,所以沒有理由爲什麼空間應該成爲問題。它看起來很困惑,因爲字符串以'{'開頭,所以它認爲它是一個對象。但由於它在引號中,所以大括號沒有任何特殊含義。 – Barmar

+0

通過鏈接查看一些解決方法[json-lib](http://stackoverflow.com/questions/30641966/remove-white-space-from-xml-element-using-java/30665244#30665244),[gson](http ://stackoverflow.com/questions/30228343/replace-whitespace-in-json-keys)爲不同的json庫 – hsnkhrmn

回答

0

有一些不匹配哪些字符允許在一個JSON標籤和XML標籤。例如,空白在JSON標籤中有效,但不在XML標籤中。所以如果你需要想出一個通用的解決方案,你將不得不發明一些方法來通過轉義序列來表示你的xml標籤中不允許的字符。

它從你的問題不完全清楚,但我想問題是,你實際上得到像..., " location":"{GALATIANS..."作爲你的JSON字符串,這是發件人的問題,標籤實際上應該是「位置」。如果是這種情況,您可以使用java.lang.String.trim方法來擺脫前導和尾隨空格。

+0

嗨,亨利,感謝您的迴應。 問題與您提到的相同。 如果我在位置標記的末尾添加一個空格(「」),然後它用雙引號(「)結束,然後它可以正常工作。這是拋出一個例外 「location」:「{GALATIANS 2:20}」,//這是按預期工作 我認爲這是一個圖書館的問題。 – Bin