java中的XML到JSON转换

问题描述:

我知道几个将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

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