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字符串是通过解析XML字符串并构建相应的JSON对象来完成的。这个过程通常需要借助特定的库,如Java中的`org.json`。理解XML和JSON的结构差异,以及如何利用这些库进行...
标题中的“使用json-lib将java对象转换成json字符串”指的是在Java编程中,利用json-lib这个库来将Java对象转化为JSON格式的字符串。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于前后端...
3. **处理数据类型**:JSON支持各种数据类型,如字符串、数字、布尔值等,需要适当地转换为XML元素或属性。 4. **处理数组**:当遇到JSON数组时,需要创建多个具有相同标签名的XML元素。 5. **构建XML结构**:根据...
JSON-lib提供了将Java对象转换为JSON字符串,以及将JSON字符串反序列化回Java对象的功能。例如,你可以有一个简单的JavaBean,如`Student`类,包含id、name、email、address和一个`Birthday`类属性。通过JSON-lib,...
2. **XML转JSON**:相反的过程是将XML解析为JSON,这需要解析XML元素和属性,将其映射到JSON对象的键值对。例如,上述XML文档转换成JSON可能为: ```json { "root": { "key1": "value1", "key2": ["1", "2", "3...
本文将深入探讨如何使用Java将对象转换为JSON以及字符串数组。 首先,我们需要一个库来处理JSON转换,这里提到的"json-lib"是一个广泛使用的Java JSON库,提供了多种类型到JSON的转换功能。在Java中,有两种主要...
总的来说,json2.js是解决JSON处理兼容性问题的一个工具,它提供了一种安全且标准化的方式来在JavaScript中进行JSON字符串与对象之间的转换,尤其对于那些不支持原生JSON操作的老版本浏览器而言。
xml字符串转换json格式 可用于微信小程序xml字符串转换json格式 安装 npm方式安装 npm install --save xmlstring2json bower方式安装 bower install xmlstring2json 用法示例: bookstore.xml文件 <title>...
7. 示例代码:笔记中可能包含实际操作的例子,演示如何使用JSON-lib进行对象和字符串之间的转换,以及XML和JSON之间的转换。 8. 异常处理:在实际使用中,可能会遇到如数据不匹配、格式错误等问题,学习笔记可能会...
C# json格式转换,Json格式字符串与C#对象相互转换,类库和测试demo 写了一个json与C#对象相互装换的类库,直接调用就行,有测试案例,代码注释非常详细 部分方法: /// 将Json字符串解析为C#中的对象 /// Json格式...
- JQuery - jquery.json2xml.js - jquery.xml2json.js 2. XML 字符串转换成 JSON 对象 $.xml2json(str); 3. JSON 对象转换成 XML 字符串 $.json2xml(obj);
这里,我们加载XML字符串到`XmlDocument`,然后直接序列化为JSON字符串。 2. **反序列化JSON到XML** 如果你想将JSON字符串解析成XML文档,可以使用`JsonConvert`的`DeserializeXmlNode()`方法: ```csharp ...
### JSON-lib框架详解:转换JSON、XML不再困难 #### 一、概述 JSON-lib是一个用于Java平台的强大且灵活的库,它可以实现Java对象与JSON、XML格式数据之间的互相转换。对于那些希望在Java应用程序中轻松处理JSON或...
Json对象与json字符串互相转换处理工具
在IT行业中,XML(Extensible Markup Language)和JSON(JavaScript Object Notation)是两种广泛用于数据交换的格式。...在实际开发中,确保正确处理XML中的命名空间、属性、注释和处理指令等特殊元素也是必不可少的。
例如,它可能包含一个名为`JsonToXmlConverter`的类,该类具有将JSON字符串或对象转化为XML字符串的方法。使用这个库,开发者无需手动编写转换代码,只需调用相应的API,即可完成转换任务,大大简化了开发流程。 在...
同时,可以通过编写相应的工具类来实现xml与json的转换,例如上述示例中提到的XmlExercise工具类就提供了xml字符串和xmlDocument转换为json字符串的功能,以及json字符串转换成xml字符串的功能。 4. 实例讲解:在...
xml转换为json的js库文件
这个插件的工作原理是解析XML文档,并将其转换为JavaScript对象,然后以JSON字符串的形式返回。这样,开发者就可以轻松地在JavaScript中处理这些数据,例如在页面上动态显示或进行进一步的处理。 使用jQuery xml-to...