我正在尝试使用json lib-2.4.jar将json字符串转换为xml,并且我收到以下异常。
线程“main”中的异常nu.xom.IllegalNameException:0x20不是合法的NCName字符 在nu.xom.Verifier.throwIllegalNameException(未知来源)
我已经确定了这个问题,因为json字符串的'location'标签中有一个空格字符(0x20)并且它没有被正确解析。我删除了空间并进行了测试,然后按预期工作。我还尝试了使用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 :(得分:0)
JSON标记和XML标记中允许使用哪些字符存在一些不匹配。例如,空格在JSON标记中有效,但在XML标记中无效。因此,如果您需要提出一般解决方案,则必须通过转义序列创建一些方法来表示xml标记中不允许的字符。
你的问题并不完全清楚,但我想问题是你实际上得到了..., " location":"{GALATIANS..."
这样的JSON字符串,这是发件人的问题,而标签实际上应该只是“位置” ”。如果是这种情况,您可以使用java.lang.String.trim
方法去除前导和尾随空格。