首先,我们需要了解为什么会出现空值被转为空中括号的问题。这是因为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时空值被转为空中括号的问题


基础教程推荐
- Java效率提升神器之Guava-Joiner 2023-02-19
- 解决中文乱码的几种解决方法(推荐) 2023-08-02
- SpringMVC RESTFul实现列表功能 2022-11-23
- Java postgresql数组字段类型处理方法详解 2023-06-17
- Java如何读取jar包中的resource资源文件 2023-04-17
- SpringMVC五种类型参数传递及json传递参数 2023-03-06
- SpringBoot分页的实现与long型id精度丢失问题的解决方案介绍 2023-06-10
- 详解MybatisPlus中@Version注解的使用 2023-01-13
- jsp ${param.id}用法 2023-12-22
- Tab切换组件(选项卡功能)实例代码 2023-12-23