解决使用json-lib包实现xml转json时空值被转为空中括号的问题
时间:2019-04-13
本文章向大家介绍解决使用json-lib包实现xml转json时空值被转为空中括号的问题,主要包括解决使用json-lib包实现xml转json时空值被转为空中括号的问题使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
项目数据库中出现许多值为中括号[]的数据,测试报了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
大家可以根据自身需求选择使用哪种方法
- Python标准库14 数据库 (sqlite3)
- spring cloud 学习(4) - hystrix 服务熔断处理
- Hadoop(十)Hadoop IO之数据完整性
- Tomcat 端口号修改
- Mac OSX网络诊断命令
- spring cloud 学习(5) - config server
- Java魔法堂:解读基于Type Erasure的泛型
- spring cloud 学习(3) - feign入门
- Java集合源码分析(四)HashMap
- Java魔法堂:解读基于Type Erasure的泛型
- 显示mybatis的执行的sql
- spring cloud 学习(2) - eureka server注册中心高可用及安全认证
- mybatis在xml文件中处理大于号小于号的方法
- kafka集群部署
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JS+CSS 3实现图片滑块效果
- 深入理解 AuthenticationManagerBuilder 【源码篇】
- 每天一道前端面试题:如何进行网站性能优化
- PowerBI DAX 度量值管理 - 驾驭度量值依赖关系,删除无效
- Git 实用命令小抄
- 手把手教你画酷炫环形图(图文详解)
- 为什么说神经网络可以逼近任意函数?
- 缩放|位移|渐变简单动画
- HTTP状态码及其含义
- 卷积神经网络中的参数共享/权重复制
- 前端面试基础题:从浏览器地址栏输入url到显示页面的步骤
- 学会这15个TS面试题,拿到更高薪的offer
- 前端面试基础题:请描述⼀下 cookies , sessionStorage 和 localStorage 的区别?
- matplotlib基础绘图命令之pie
- 【从0到1学算法】快速排序