2011-06-09 72 views
1

我知道幾個將XML轉換爲JSON的開源java庫。java中的XML到JSON轉換

但是,我正在尋找一個庫(或方式),將抑制元素屬性前面的前導@。因此,例如,給出以下JSON字符串:

{ "description": 
     { "@lang":"en-us", 
     "@maxlength":"500", 
     "#text":"Vitamin D Supplementation" 
     } 
} 

我想產生以下JSON字符串(請注意在「郎」和「最大長度」的前失蹤@):

{ "description": 
     { "lang":"en-us", 
     "maxlength":"500", 
     "#text":"Vitamin D Supplementation" 
     } 
} 

據我所知,沒有圖書館提供這樣做的方法。也許有一種方法可以使用正則表達式來實現這一點,但我必須小心不要在數據中剝離有效的@字符?

+0

我懷疑有這樣做的問題是,你運行屬性「@ foo」和子元素「foo」之間的衝突風險。你當然可以後處理JSON來改變任何以'@'開頭的字典鍵,但是你需要一些其他策略來處理衝突。 – Darien 2011-06-09 18:26:41

+0

這不會成爲問題,因爲另一個庫將使用JSON字符串,並將使用類型推斷作爲區分屬性和元素的一種方式。 – 2011-06-09 18:39:13

+0

這仍然是一個問題,因爲你不能在JSON中做到這一點:'{「foo」:「你好」,「foo」:{}}',你永遠沒有機會看到兩個有效載荷,因爲它無效重複密鑰。 – Darien 2011-06-09 18:43:31

回答

1

String.replace("\"@", "\"")還是什麼?

UPDATE

爲了防止替換字符串值中的@,你可以使用regexp version of replace。你會在前面加上@前面加上@符號,而不是前面加上一些X,其中X是冒號(:)後面跟着任意數量的空格,你會再次替換爲「。

一個不太可靠的方法是讓一個庫以類似於內容事件的方式對json進行流式處理,捕獲任何對象成員名稱事件,將以@開頭的相應成員名稱相應地替換,然後將它們返回給事件流。然後,該流再次轉換爲JSON文本。 (目前我正在開發一個提供此類功能的庫,但遺憾的是它尚未發佈。)

同樣,您可以將XML綁定到JSON翻譯過程。翻譯者必須將XML流式傳輸到某種XML內容事件,稍後將其轉換爲JSON內容事件,然後將這些事件串化爲JSON文本。 (好的,我就是這麼做的。)如果你可以插入JSON事件階段的任何一邊,你可以很容易地翻譯特定的對象成員名稱。很明顯,您使用的庫必須儘可能地進行插入,如果僅通過提供獨立調用的進程步驟。

(在你不知道的情況下,「對象的成員名」是前面的部分:在一個JSON對象中,「價值」後的部分。)

+0

sed s/@ // ftw! – Rekin 2011-06-09 19:28:39

+0

是的,謝謝。雖然我希望圖書館能夠做到這一點,但有些類似的變化是可能的,儘管這兩種看起來像他們將取代即使在內容中也是如此(儘管不太可能我會有一個「@序列內容) – 2011-06-09 19:39:42

+0

@TM:好吧,現在我更好地理解你的問題了,我想。 – 2011-06-09 20:29:16