json-lib 的XML转JSON list的转换

开发中越到一个坑爹问题,webserver 返回的list是 一个和多个 json-lib 翻译的不同, 在java bean中 是list ,一个的化会变成Object 多个才会变成array 对前台造成了很大的困难

比如

<member_bankcard_querylist_response>

  <list>

    <bank_code>6222023202033815035</bank_code>

    <status>未审核</status>

  </list>

  <success>true</success>

  <sign>8B9EEE0911F8CDC965D025911691E779</sign>

</member_bankcard_querylist_response>

翻译的是

{"member_bankcard_querylist_response": {

"list":   {

"bank_code": "6222023202033815035",

"status": "未审核"

},

"success": "true",

"sign": "8B9EEE0911F8CDC965D025911691E779"

}}

但是

<member_bankcard_querylist_response>

  <list>

    <bank_code>6222023202033815035</bank_code>

    <status>未审核</status>

  </list>

    <list>

    <bank_code>6222023202033815035</bank_code>

    <status>未审核</status>

  </list>

  <success>true</success>

  <sign>8B9EEE0911F8CDC965D025911691E779</sign>

</member_bankcard_querylist_response>

转移之后就是

{"member_bankcard_querylist_response": {

"list":   [

{

"bank_code": "6222023202033815035",

"status": "未审核"

},

{

"bank_code": "6222023202033815035",

"status": "未审核"

}

],

"success": "true",

"sign": "8B9EEE0911F8CDC965D025911691E779"

}}

想要的是都是数组,因为对于别人开发不可能进行修改.这个折磨了很久,尝试了各种办法,最后只能修改json-lib的源码来进行处理

json-lib 是根据 xml attribute的值来判断的 比如 class="array" 就处理成array class="String" 就处理成string

我们自定义了一个 class="list"

在XMLSerializer 修改处理函数

if (clazz.compareToIgnoreCase(JSONTypes.LIST) == 0) {

                if (!jsonObject.has(key)) {

                    jsonObject.element(key,

                            new JSONArray()

                                    .element(simplifyValue(

                                            jsonObject,

                                            processObjectElement(element,

                                                    defaultType))));

                    ((JSONArray) jsonObject.get(key)).setExpandElements(true);

                    classProcessed = true;

                }

            }

判断如果是class="list" 哪怕是一个也强制转成 array

比如

<member_bankcard_querylist_response>

  <list
class="list"
>

    <bank_code>6222023202033815035</bank_code>

    <status>未审核</status>

  </list>

  <success>true</success>

  <sign>8B9EEE0911F8CDC965D025911691E779</sign>

</member_bankcard_querylist_response>

转换后

{"member_bankcard_querylist_response": {

"list": [  {

"bank_code": "6222023202033815035",

"status": "未审核"

}],

"success": "true",

"sign": "8B9EEE0911F8CDC965D025911691E779"

}}

在webserver中需要增加xml的描述

import java.io.Serializable;

import javax.xml.bind.annotation.XmlAttribute;

import javax.xml.bind.annotation.XmlRootElement;

/**

 * 返回xml描述改对象为List ,在json-lib转义的时候发现list.size() == 1 的时候改回Array

 * @author JueYue

 * @date 2015年4月23日 下午4:39:48

 */

@XmlRootElement

public class XmlListBase implements Serializable {

    private static final long serialVersionUID = 1L;

    private String            beanType         = "list";

    @XmlAttribute(name = "class")

    public String getBeanType() {

        return beanType;

    }

    public void setBeanType(String beanType) {

        this.beanType = beanType;

    }

}

只要继承这个类就可以了,得到的xml 就会加上class的attribute,可能是个个例也可能帮到大家

时间: 2024-08-02 09:20:47

json-lib 的XML转JSON list的转换的相关文章

SQL2008使用json.net实现XML与JSON互转

借助CLR,首先实现字符串的互转 ? ? public class JsonFunction { /// <summary> /// XML转JSON /// </summary> /// <param name="xml"></param> /// <returns></returns> /// <remarks> /// json不建议太长 /// </remarks> [Microso

什么是json? 什么是xml?JSON与XML的区别比较

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.它是基于 JavaScript Programming Language , Standard ECMA-262 3rd Edition - December 1999 的一个子集. JSON采用完全独立于程序语言的文本格式,但是也使用了类C语言的习惯(包括C, C++, C#, Java, JavaScript, Perl, Pytho

ASP.NET中XML转JSON的方法

原文:ASP.NET中XML转JSON的方法 许多应用程序都将数据存储为XML的格式,而且会将数据以JSON的格式发送到客户端以做进一步处理.要实现这一点,它们必须将XML格式转换为JSON格式. XML转JSON代码 [csharp] view plaincopy private static string XmlToJSON(XmlDocument xmlDoc) { StringBuilder sbJSON = new StringBuilder(); sbJSON.Append("{ &

java 中xml转换为json对象

1.前提须要jar包: json-lib-2.4-jdk15.jar 和 xom-1.2.5.jar ,maven 仓库: net.sf.json-lib json-lib 2.4 jdk15 xom xom 1.2.5 2.代码部分: public static JSON xmlToJson(String xml) { XMLSerializer xmlSerializer = new XMLSerializer(); if(xml!=null && !"".equa

XML与JSON的对比

XML与JSON的对比 1.各自定义 XML 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准. XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输.XML 提供统一的方法来描述和交

JSON对象与XML相互转换工具类

依赖jar <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</

C/C++使用libcurl库发送http请求(get和post可以用于请求html信息,也可以请求xml和json等串)

C++要实现http网络连接,需要借助第三方库,libcurl使用起来还是很方便的 环境:win32 + vs2015 如果要在Linux下使用,基本同理 1,下载编译libcurl 下载curl源码,找到vs工程,按照x86 x64 并对应debug和release编译出静态库lib 2,构建工程 1)curl头文件和lib拷贝到工程目录 2)配置附加包含目录libcurl中的include和附加库目录libcurl中的lib目录 3)添加预编译宏USE_OPENSSL和CURL_STATIC

C# 二进制、Xml、Json序列化和反序列化

昨天利用业余时间对比了下C#中三种序列化方式(二进制.Xml.Json),综合来看json方式生成的字节数组长度最短,但当你需要序列化的对象中包括byte[]类型,且其长度较长时,序列化后,xml方式的长度较json方式更短.xml方式中对byte[]做了base64转换. 最后综合三种情况,写了一个基于泛型的通用类来完成序列化和反序列化操作,仅供参考,若有什么错误之处,还请指教. using System; using System.Collections.Generic; using Sys

使用solr将CSV/XML/DB/JSON数据发布为Rest Service

Download http://lucene.apache.org/solr/downloads.html Apache Solr入门基础——Windows下安装与配置 https://blog.csdn.net/wsxsxz_/article/details/62048595 Start $ cd E:\01_SOFT\Java\solr-8.2.0\bin $ solr start solr start –p <端口号> 单机版启动solr服务 solr restart –p <端口

Python学习第十三天 time datetime random os sysshutil json pickle shelve xml configparser hashlib suprocess logging re

https://www.cnblogs.com/yuanchenqi/articles/5732581.html https://www.cnblogs.com/linhaifeng/articles/6384466.html#_label2 一 time与datetime模块 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行“type(time.time())”,返回的是fl