首先,我们需要了解为什么会出现空值被转为空中括号的问题。这是因为json-lib默认不支持将空值转化为null,而将空值转化为空数组,为空数组的标志就是空中括号。
首先,我们需要了解为什么会出现空值被转为空中括号的问题。这是因为json-lib默认不支持将空值转化为null,而将空值转化为空数组,为空数组的标志就是"[]"空中括号。
那么解决这个问题的方法就是需要我们手动配置json-lib。具体操作如下:
-
首先,引入json-lib的jar包到项目中,并且依赖于lib目录下的ezmorph.jar, commons-beanutils.jar, commons-lang.jar三个jar包。
-
然后在代码中使用JSONObject.fromObject()方法将XML字符串转换成JSON对象。如下所示:
String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Response><result>success</result><data><name>张三</name><age>20</age><sex></sex></data></Response>";
JSONObject jsonObject = JSONObject.fromObject(xmlStr);
- 接下来,我们需要配置JsonConfig:
JsonConfig config = new JsonConfig();
config.setPropertySetStrategy(new PropertySetStrategy() {
@Override
public void setProperty(Object o, String s, Object o1) throws JSONException {
if (o1 == null) {
return;
}
FormattedJsonValue value = new FormattedJsonValue(o1.toString().trim());
((JSONObject) o).accumulate(s, value);
}
});
// internal FormattedJsonValue class
public class FormattedJsonValue {
private final String value;
public FormattedJsonValue(String value) {
this.value = value;
}
@Override
public String toString() {
if (StringUtils.isBlank(value)) {
return null;
}
return value;
}
}
其中,我们使用了自定义的FormattedJsonValue类,将空值转换成null。通过配置JsonConfig中的setPropertySetStrategy方法实现将空值转换成null的目的。
- 最后,我们再次将XML字符串转换成JSON对象,这一次我们使用JsonConfig进行配置:
JSONObject jsonObject = JSONObject.fromObject(xmlStr, config);
这样,就避免了空值被转化为空中括号的问题。
示例1:将以下XML字符串转换成JSON对象,其中sex节点为null:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<result>success</result>
<data>
<name>张三</name>
<age>20</age>
<sex></sex>
</data>
</response>
通过以上的配置,sex节点会被自动转换成null。
示例2:将以下XML字符串转换成JSON对象,其中sex节点不存在:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<result>success</result>
<data>
<name>张三</name>
<age>20</age>
</data>
</response>
通过以上的配置,转换后的JSON对象中不会存在sex节点,而不会出现空中括号。
本文标题为:解决使用json-lib包实现xml转json时空值被转为空中括号的问题
![](/xwassets/images/pre.png)
![](/xwassets/images/next.png)
- mall整合SpringSecurity及JWT实现认证授权实战 2023-01-18
- 一次JAVA项目撑爆服务器CPU、内存的事故回忆 2023-09-01
- SpringBoot测试配置属性与web启动环境超详细图解 2023-06-17
- Java设计模式之模板方法详解 2023-03-21
- 逐一侦破 网上银行安全漏洞 2023-12-29
- SpringBoot实现文件上传下载实时进度条功能(附源码) 2023-06-23
- Spring中Bean扫描原理详情 2023-02-19
- Spring Boot 实现字段唯一校验功能(实例代码) 2023-04-12
- 关于Spring Boot内存泄露排查的记录 2023-01-13
- SpringMVC中RequestBody注解的List参数传递方式 2023-06-30