java xml转换成JSON问题 x2js,用javascript可以实现,https://code.google.com/p/x2js/ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 问题不是那中方式的问题,问题是你属性字段太操蛋了,偏偏是个type,换成任何一个都行,就type不行。看源码for( int i = 0; i < attrCount; i++ ){ Attribute attr = element.getAttribute( i ); String attrname = attr.getQualifiedName(); if( isTypeHintsEnabled() && (addJsonPrefix( "class" ).compareToIgnoreCase( attrname ) == 0 || addJsonPrefix( "type" ).compareToIgnoreCase( attrname ) == 0) ){ continue; } String attrvalue = attr.getValue(); setOrAccumulate( jsonObject, "@" + removeNamespacePrefix( attrname ), trimSpaceFromValue( attrvalue ) ); } 遇到属性是type的直接跳过了,否则才加@符号的,不信你换任何一个字符串看看。我记得以前回复过类似的问题。 同意楼上的说法,type 直接跳过。 确实是太操蛋,可以用户的XML有很多属性名就是xsi:type,总不能叫人家不要用这样的属性名吧?有什么好的办法可以解决这个问题呢? 确实是太操蛋,可以用户的XML有很多属性名就是xsi:type,总不能叫人家不要用这样的属性名吧?有什么好的办法可以解决这个问题呢?不会是去更改源码吧? XMLSerializer xmlSerializer = new XMLSerializer(); String xml = "<root><name type='type'>zhaipuhong</name><gender>male</gender><birthday><year>1970</year><month>12</month><day>17</day></birthday></root>"; xmlSerializer.setTypeHintsCompatibility(false); xmlSerializer.setTypeHintsEnabled(false); JSON json = xmlSerializer.read(xml); System.out.println(json);这样设置下吧。 嗯,但是这样type是可以了,xsi:type还是不行 因为你传的是XML字符串,我觉得可以在遇到xsi:type的时候做一个转换,比如转成xsi_type什么的,然后再把转出来的JSON再做一次转换xsi:type—>xsi:type,这样应该可以得到你想要的 http://blog.csdn.net/withiter/article/details/17680623 谢谢大家,问题解决,最终还是用1#的办法,用x2js在前台转换,遇到“:”就用随机字符串替代。当然,2#的方法也相当不错,只是在java中正则表达式还不是很熟悉,所以在前台js里面转了,再次谢谢大家! 页面select值保存问题! 求JSP开发环境详细步骤 多用户同时登陆系统,session被替换,请教一下? 第二次调用showModalDialog时走后台代码后再返回前台时异常问题 急!jsp发邮件程序问题!大家帮忙啊,在线等! 小弟跪求解决如何在JSP读取COOKIE 在线等急!!!!! Jsp调用Oracle存储过程返回参数的问题! 关于 synchronized 如何得到表中记录的总数? 有谁知道新版百度文库的浏览怎么弄得吗(不是以前那个FlexPaper显示Flash的) java正则表达式截取字符串 新手求助,关于客户关系管理的功能JSP,sql数据库的
Attribute attr = element.getAttribute( i );
String attrname = attr.getQualifiedName();
if( isTypeHintsEnabled()
&& (addJsonPrefix( "class" ).compareToIgnoreCase( attrname ) == 0 || addJsonPrefix(
"type" ).compareToIgnoreCase( attrname ) == 0) ){
continue;
}
String attrvalue = attr.getValue();
setOrAccumulate( jsonObject, "@" + removeNamespacePrefix( attrname ),
trimSpaceFromValue( attrvalue ) );
} 遇到属性是type的直接跳过了,否则才加@符号的,不信你换任何一个字符串看看。我记得以前回复过类似的问题。
不会是去更改源码吧?
String xml = "<root><name type='type'>zhaipuhong</name><gender>male</gender><birthday><year>1970</year><month>12</month><day>17</day></birthday></root>";
xmlSerializer.setTypeHintsCompatibility(false);
xmlSerializer.setTypeHintsEnabled(false);
JSON json = xmlSerializer.read(xml);
System.out.println(json);这样设置下吧。
谢谢大家,问题解决,最终还是用1#的办法,用x2js在前台转换,遇到“:”就用随机字符串替代。当然,2#的方法也相当不错,只是在java中正则表达式还不是很熟悉,所以在前台js里面转了,再次谢谢大家!