1

json lib-2.4.jar を使用して json 文字列を xml に変換しようとしていますが、次の例外が発生しています。

スレッド「メイン」の例外 nu.xom.IllegalNameException: 0x20 は nu.xom.Verifier.throwIllegalNameException で有効な NCName 文字ではありません (不明なソース)

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"}}}
]
}

これに関するヘルプは非常に高く評価されます

4

1 に答える 1

0

JSON タグと XML タグで使用できる文字が一致していません。たとえば、空白は JSON タグでは有効ですが、XML タグでは有効ではありません。したがって、一般的な解決策を考え出す必要がある場合は、xml タグで許可されていない文字をエスケープ シーケンスで表す何らかの方法を考案する必要があります。

あなたの質問からは完全には明らかではありませんが、問題は実際に..., " location":"{GALATIANS..."JSON文字列のようなものを取得することであり、これは送信者の問題であり、タグは実際には「場所」でなければならない. この場合、java.lang.String.trimメソッドを使用して先頭と末尾のスペースを取り除くことができます。

于 2012-12-25T07:44:38.913 に答える