`

JSON Lib, XML转JSON字符串不要namespace,以及处理特殊xml属性"type"

阅读更多
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, 我的问题也解决。希望可以给你带来帮助。

5
0
分享到:
评论
2 楼 hldfxh 2015-03-20  
 

解决了我的问题
1 楼 xiaobenbenxiong 2012-07-10  
多谢指导

相关推荐

    将string类型xml字符串转为json字符串

    总结来说,将string类型的XML字符串转换为JSON字符串是通过解析XML字符串并构建相应的JSON对象来完成的。这个过程通常需要借助特定的库,如Java中的`org.json`。理解XML和JSON的结构差异,以及如何利用这些库进行...

    使用json-lib将java对象转换成json字符串

    标题中的“使用json-lib将java对象转换成json字符串”指的是在Java编程中,利用json-lib这个库来将Java对象转化为JSON格式的字符串。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于前后端...

    js下xml转json和json转xml

    3. **处理数据类型**:JSON支持各种数据类型,如字符串、数字、布尔值等,需要适当地转换为XML元素或属性。 4. **处理数组**:当遇到JSON数组时,需要创建多个具有相同标签名的XML元素。 5. **构建XML结构**:根据...

    JSON-lib框架,转换JSON、XML不再困难

    JSON-lib提供了将Java对象转换为JSON字符串,以及将JSON字符串反序列化回Java对象的功能。例如,你可以有一个简单的JavaBean,如`Student`类,包含id、name、email、address和一个`Birthday`类属性。通过JSON-lib,...

    json和xml互转

    2. **XML转JSON**:相反的过程是将XML解析为JSON,这需要解析XML元素和属性,将其映射到JSON对象的键值对。例如,上述XML文档转换成JSON可能为: ```json { "root": { "key1": "value1", "key2": ["1", "2", "3...

    java对象转换为json字符串或字符串数组

    本文将深入探讨如何使用Java将对象转换为JSON以及字符串数组。 首先,我们需要一个库来处理JSON转换,这里提到的"json-lib"是一个广泛使用的Java JSON库,提供了多种类型到JSON的转换功能。在Java中,有两种主要...

    json2.js 字符串转转json对象工具

    总的来说,json2.js是解决JSON处理兼容性问题的一个工具,它提供了一种安全且标准化的方式来在JavaScript中进行JSON字符串与对象之间的转换,尤其对于那些不支持原生JSON操作的老版本浏览器而言。

    微信小程序-xml字符串转换json格式,适用于微信小程序

    xml字符串转换json格式 可用于微信小程序xml字符串转换json格式 安装 npm方式安装 npm install --save xmlstring2json bower方式安装 bower install xmlstring2json 用法示例: bookstore.xml文件 &lt;title&gt;...

    《JSON-lib框架,转换JSON、XML不再困难》学习笔记

    7. 示例代码:笔记中可能包含实际操作的例子,演示如何使用JSON-lib进行对象和字符串之间的转换,以及XML和JSON之间的转换。 8. 异常处理:在实际使用中,可能会遇到如数据不匹配、格式错误等问题,学习笔记可能会...

    C# json格式解析,Json格式字符串与C#对象相互转换,类库+使用案例,注释详细

    C# json格式转换,Json格式字符串与C#对象相互转换,类库和测试demo 写了一个json与C#对象相互装换的类库,直接调用就行,有测试案例,代码注释非常详细 部分方法: /// 将Json字符串解析为C#中的对象 /// Json格式...

    json转xml插件工具

    - JQuery - jquery.json2xml.js - jquery.xml2json.js 2. XML 字符串转换成 JSON 对象 $.xml2json(str); 3. JSON 对象转换成 XML 字符串 $.json2xml(obj);

    C#写的Json与Xml互转支持.net framework2.0以上组件Newtonsoft.Json.dll

    这里,我们加载XML字符串到`XmlDocument`,然后直接序列化为JSON字符串。 2. **反序列化JSON到XML** 如果你想将JSON字符串解析成XML文档,可以使用`JsonConvert`的`DeserializeXmlNode()`方法: ```csharp ...

    JSON-lib框架,转换JSON、XML不再困难

    ### JSON-lib框架详解:转换JSON、XML不再困难 #### 一、概述 JSON-lib是一个用于Java平台的强大且灵活的库,它可以实现Java对象与JSON、XML格式数据之间的互相转换。对于那些希望在Java应用程序中轻松处理JSON或...

    Json对象与json字符串互相转换处理工具

    Json对象与json字符串互相转换处理工具

    XML转换为JSON(支持多种方法)

    在IT行业中,XML(Extensible Markup Language)和JSON(JavaScript Object Notation)是两种广泛用于数据交换的格式。...在实际开发中,确保正确处理XML中的命名空间、属性、注释和处理指令等特殊元素也是必不可少的。

    json自动转换成xml的json包

    例如,它可能包含一个名为`JsonToXmlConverter`的类,该类具有将JSON字符串或对象转化为XML字符串的方法。使用这个库,开发者无需手动编写转换代码,只需调用相应的API,即可完成转换任务,大大简化了开发流程。 在...

    java实现Xml与json之间的相互转换操作示例

    同时,可以通过编写相应的工具类来实现xml与json的转换,例如上述示例中提到的XmlExercise工具类就提供了xml字符串和xmlDocument转换为json字符串的功能,以及json字符串转换成xml字符串的功能。 4. 实例讲解:在...

    xml文件转json

    xml转换为json的js库文件

    jQuery xml-to-json xml转JSON插件

    这个插件的工作原理是解析XML文档,并将其转换为JavaScript对象,然后以JSON字符串的形式返回。这样,开发者就可以轻松地在JavaScript中处理这些数据,例如在页面上动态显示或进行进一步的处理。 使用jQuery xml-to...

Global site tag (gtag.js) - Google Analytics