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