XMLSerializer xmlSerializer = new XMLSerializer();
JSON json = xmlSerializer.read(xml);
return json.toString(3);
以上代码在xmll转成json字符串后,json字符串里会含有namespace属性,把下面的xml片断
<openremote xmlns="http://www.openremote.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:schemaLocation="http://www.openremote.org/panel.xsd">
转为
{
"@xmlns": "http://www.openremote.org",
"@xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
"@xmlns:schemaLocation": "http://www.openremote.org/panel.xsd"
}
但是这恰好是我不想要的属性。不用担心,只需给XMLSerializer加上设置属性skipNamespace为true即可,如下代码:
XMLSerializer xmlSerializer = new XMLSerializer();
xmlSerializer.setSkipNamespaces(true);
JSON json = xmlSerializer.read(xml);
return json.toString(3);
好,这一点就告一段落.
现在我又遇到了一个问题,那就是在xml里属性名为type的属性在转换后的json字符串中丢失了, 同样这一点也不用太担心,我看了一下XMLSerialzer的源码,发现XMLSerializer的构造器是这样写的:
public XMLSerializer() {
setObjectName( "o" );
setArrayName( "a" );
setElementName( "e" );
setTypeHintsEnabled( true );
setTypeHintsCompatibility( true );
setNamespaceLenient( false );
setSkipNamespaces( false );
setRemoveNamespacePrefixFromElements( false );
setTrimSpaces( false );
setExpandableProperties( EMPTY_ARRAY );
setSkipNamespaces( false );
}
其中
setTypeHintsEnabled( true );
setTypeHintsCompatibility( true );
就在搞鬼了, 因为在XMLSerialzer的
private JSON processObjectElement( Element element, String defaultType )
方法中还有这么一段把xml转为json的代码,如下:
// process attributes first
int attrCount = element.getAttributeCount();
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 ) );
}
addJsonPrefix的代码片断为
private String addJsonPrefix( String str ) {
if( !isTypeHintsCompatibility() ){
return JSON_PREFIX + str;
}
return str;
}
现在,你应该很清楚的可以看到当在构造器中
setTypeHintsEnabled(true);
setTypeHintsCompatibility(true);
的时候
if( isTypeHintsEnabled()
&& (addJsonPrefix( "class" ).compareToIgnoreCase( attrname ) == 0 || addJsonPrefix(
"type" ).compareToIgnoreCase( attrname ) == 0) )
也为true.
这样的话,type这个属性就被pass掉了。
所以,为了让type这个比较特殊的属性能在转换后的json字答串中出现,你只需对XMLSerialzer的实例这样做:
setTypeHintsEnabled(false);
或
setTypeHintsCompatibility(false);
或
setTypeHintsEnabled(false);
setTypeHintsCompatibility(false);
也就是说,反正让
if( isTypeHintsEnabled()
&& (addJsonPrefix( "class" ).compareToIgnoreCase( attrname ) == 0 || addJsonPrefix(
"type" ).compareToIgnoreCase( attrname ) == 0) )
为false就行,这样在xml中有type这个属性的时候就会转换为 "@type":"xxxx"
OK, 我的问题也解决。希望可以给你带来帮助。
分享到:
相关推荐
将string类型的xml转为JSON字符串,利用JSONObject处理JSON串
xml字符串转换json格式 可用于微信小程序xml字符串转换json格式 安装 npm方式安装 npm install --save xmlstring2json bower方式安装 bower install xmlstring2json 用法示例: bookstore.xml文件 <title>...
- JQuery - jquery.json2xml.js - jquery.xml2json.js 2. XML 字符串转换成 JSON 对象 $.xml2json(str); 3. JSON 对象转换成 XML 字符串 $.json2xml(obj);
Json对象与json字符串互相转换处理工具
主要用于将java对象转换为json对象字符串,或字符串数组。
xml转换为json的js库文件
json字串 解析成jsonObject的工具,替代eval方法使用 IE8以上浏览器貌似自带 JSON.stringify
自己写的json与xml互转工具 简单实用
JSON-lib框架,转换JSON、XML不再困难
js下xml转json和json转xml
NULL 博文链接:https://yxgyh.iteye.com/blog/392657
将XML数据转化为JSON格式 使用方法: 1.添加对XmlToJSON.dll的引用 2. string JSON = XmlToJSON.Converter.XmlToJSON(xmlDoc); 示例: XmlDocument doc = new XmlDocument(); //doc.LoadXml(@"<root>aaa</root>...
C# json格式转换,Json格式字符串与C#对象相互转换,类库和测试demo 写了一个json与C#对象相互装换的类库,直接调用就行,有测试案例,代码注释非常详细 部分方法: /// 将Json字符串解析为C#中的对象 /// Json格式...
标准json字符串编码使用unicode,即boost 提供的 中拼接起来的字符串采用unicode字符集编码,而很多网页采用编码为utf8。 这个库字符编码采用系统编码,系统采用utf8字符集的话拼接起来字符串就是ut8了;另外在博客...
mysql解析Json字符串插件 安装方法 1、拷贝lib_mysqludf_json_parsing.dll到mysql目录C:\Program Files\MariaDB 5.5\lib\plugin下 2、在数据库中执行 DROP FUNCTION json_get; CREATE FUNCTION json_get RETURNS ...
对象生成json字符串,根据字符串生成对象|list
Ext 中JsonLib 解析字符串 Ext 中JsonLib 解析字符串 Ext 中JsonLib 解析字符串
jQuery xml-to-json xml转JSON jQuery实现xml转JSON插件 有demo和相关文档
该程序用C#编写,基于第三方类库实现TCP协议收发文本数据,比如Json,xml等字符串数据。SharpSocket底层采用Windows的IOCP模型,是最稳定和高效的Socket编程模型。SharpSocket代码经过精心优化, 有些直接在IL层编写,...
java工程源码实现xml和json的互转,工程已包含所jar包:commons-beanutils-1.7.0.jar、commons-collections-3.1.jar、commons-lang-2.5.jar、commons-logging.jar、ezmorph-1.0.3.jar、json-lib-2.4-jdk15.jar、xom-...