2012-12-25 42 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