解决使用json-lib包实现xml转json时空值被转为空中括号的问题
作者:wdc 发布时间:2022-10-20 02:12:14
项目数据库中出现许多值为中括号[]的数据,测试报了bug,经过排查是因为使用了json-lib 的jar包导致。json-lib在将xml字符串转换为json格式的过程中,会将空值转化了[],现在就简单的总结一下,两种xml转json包的异同。可能是因为此类问题比较初级,所以网上虽然有人提出此类问题,但是没有发现回答。为了方便像我一样的初级程序员能尽快的发现和解决问题,写了这篇博文。
网上能查到的xml转json的jar包大部分是net.sf.json-lib,这个包在json解析方面应用较多,但是缺点是需要的依赖包比较多。但是这里只讲他xml转json。
1、net.sf.json-lib 转json;
JSON json =xmlSerializer.read(xml);
这个方法出现的问题便是会将空值转化为[],使用 json.get(value).getclass 获取[]的类型可以发现:json-lib将空值识别为了jsonarray类型而不是string,而jsonarray的tostring方法被重写为[,,,,]
如果依然要使用这个方法,可以做如下修改,在使用getString()方法获取由xml转化的json对象值时,先判断类型是是否为string再获取。
json.get(value) instanceof String ? json.getString(value):""
2、org.json 转json :
org.json.JSONObject jsonObj = org.json.XML.toJSONObject(xml);
不会生成[]值,但是会保留根标签(标准XML文档有且只有一个根标签,所谓的根标签就是一对<根标签></根标签>包含其他全部标签),而一般根标签对数据而言是没有意义的,所以你如果需要做处理的话
jsonObj.get("root");
下面是测试代码:
package com.pptv.ppvision.util;
import org.json.XML;
import net.sf.json.JSONObject;
import net.sf.json.xml.XMLSerializer;
public class Xml2JsonTest {
private static String xml = "<root><user><name>weless</name><sex></sex></user></root>";
public static void main(String[] args) {
testOrgJSon();
testXmlSerializer();
}
public static void testOrgJSon(){
org.json.JSONObject jsonObj = XML.toJSONObject(xml);
System.out.println("org.json xml2json:"+jsonObj);
org.json.JSONObject user = jsonObj.getJSONObject("root").getJSONObject("user");//org.json需去除根标签
System.out.println("用户名:"+user.getString("name"));
System.out.println("性别:"+user.getString("sex"));
}
public static void testXmlSerializer(){
XMLSerializer xmlSerializer = new XMLSerializer();
JSONObject jsonObject = (JSONObject)xmlSerializer.read(xml);
System.out.println("json-lib xml2json result: "+jsonObject);
JSONObject user = jsonObject.getJSONObject("user");
System.out.println("用户名:"+user.get("name"));
System.out.println("性别:"+(user.get("sex") instanceof String ? user.getString("sex"):""));
}
}
这里为大家提供了两种方法
一种是使用getString()方法获取由xml转化的json对象值时,先判断类型是是否为string再获取
一种是org.json
大家可以根据自身需求选择使用哪种方法
来源:http://blog.csdn.net/rain_xia_/article/details/51065135


猜你喜欢
- 指定相关的测试代码首先,写一个用于测试的关于Main(String[] args)参数输入有关的代码类,如下:using System;pu
- 一、Images1、概述Image 类为Bitmap(位图) 和 Metafile(矢量图) 的类提供功能的抽象基类。Image类不能直接创
- 本文实例总结了C#实现按照指定长度在数字前补0方法。分享给大家供大家参考。具体分析如下:这里分析了C#按照指定的长度在数字前补0的两种方法例
- 这篇文章主要介绍了Spring如何使用注解的方式创建bean,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需
- 一:背景1. 讲故事高级语言玩多了,可能很多人对指针或者汇编都淡忘了,本篇就和大家聊一聊指针,虽然C#中是不提倡使用的,但你能说指针在C#中
- 本文介绍在使用C#开发WinForm窗体程序时,如何设置窗体的大小不能被改变。我们在开发一个窗体(WinForm)程序时,所有的控件都部署在
- 一、创建 Spring 项目接下来使用 Maven 来创建⼀个 Spring 项⽬,创建 Spring 项目和 Servlet 类似,总共分
- 什么是mybatis,mybatis有什么特点,下面先给大家介绍下mybatis的概念及特点。jdbc开发优缺点:1)优点:简单易学,上手快
- Java 目前已经出到13的版本,但是国内大部分公司应该都停留在 Java 8 的版本(不敢承担升级带来的风险)。在Java8中给我们带来了
- C#的特性record 类型、模式匹配、init 属性一、record 类型record ,我还是用原词吧,我知道有翻译为“记录类型”的说法
- Android 自定义组件成JAR包的实现方法,这里对自己实现的Android View 组件进行JAR 包的处理。
- 问题springboot 集成springcloud时常常由于版本问题而报错,如下:com.sun.jersey.api.client.Cl
- 前言:在java的网络通信中,两个不同节点的主机想要进行通信则可以通过建立Socket对象(相当于客户端主机,向服务端请求发送信息)和Ser
- 话不多说,请看代码:System.Math.Abs(float value);System.Math.Abs(decimal value);
- 有时我们获取到了页面需要在Java代码中进行解析,获取html中的数据,Jsoup是一个很方便的工具。一、什么是Jsoup?官网网站:htt
- java对字符串进行utf-8编码我们在调用第三方 API 时,常常会被要求用到路径变量,而路径变量一般都是 utf-8 编码的,因此需要对
- JPA自定义VO类型转换(EntityUtils工具类)在JPA查询中,如果需要返回自定义的类,可以使用EntityUtils工具类,该类源
- 相关文章:Java使用POI导出Excel(一):单sheetJava使用POI导出Excel(二):多个sheet相信在大部分的web项目
- C#实现的获取路由器MAC地址,路由器外网地址。对于要获取路由器MAC地址,一定需要知道路由器web管理系统的用户名和密码。至于获取路由器的
- 1.算法效率算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。时间复杂度主要衡