【问题标题】:JSON XML conversion issue-whitespaceJSON XML 转换问题-空白
【发布时间】:2012-12-25 06:18:13
【问题描述】:

我正在尝试使用 json lib-2.4.jar 将 json 字符串转换为 xml,但出现以下异常。

线程“main”中的异常 nu.xom.IllegalNameException: 0x20 不是合法的 NCName 字符 在 nu.xom.Verifier.throwIllegalNameException(未知来源)

我已经确定了这个问题,因为 json 字符串的“位置”标记中有一个空白字符 (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"}}}
]
}

对此的任何帮助都将非常感激

【问题讨论】:

  • 似乎是库中的一个错误。 location 属性的值是一个字符串,所以没有理由让空格成为问题。似乎它变得混乱了,因为字符串以{ 开头,所以它认为它是一个对象。但由于是引号,大括号没有任何特殊含义。
  • 通过链接json-libgson查看不同json库的一些解决方法

标签: java xml json


【解决方案1】:

JSON 标记和 XML 标记中允许的字符存在一些不匹配。例如,空白在 JSON 标记中有效,但在 XML 标记中无效。因此,如果您需要提出一个通用的解决方案,您将不得不发明一些方法来通过转义序列来表示 xml 标签中不允许的字符。

从您的问题中并不完全清楚,但我想问题是您实际上将..., " location":"{GALATIANS..." 之类的东西作为您的 JSON 字符串,这是发件人的问题,标签实际上应该只是“位置”。如果是这种情况,您可以使用 java.lang.String.trim 方法去除前导和尾随空格。

【讨论】:

  • 您好亨利,感谢您的回复。问题和你说的一样。如果我在位置标记的末尾添加一个空格(“”),然后用双引号(“)关闭它。然后它可以正常工作。“位置”:“{GALATINS 2:20}”,//这是抛出一个异常。“位置”:“{GALATINS 2:20}”,//这按预期工作。我认为这是库的问题。
猜你喜欢
  • 2014-11-26
  • 2011-07-20
  • 2014-03-27
  • 1970-01-01
  • 2013-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
相关资源
最近更新 更多