Java中将xml⽂件转化为json的两种⽅式
最近⼀直没有时间写博客,忙着房⼦,天天来回折腾,光地铁费就花了不少,最后综合各种因素考虑,决定沙河⾼教园,哈哈,没错,别⼈都是越搬离公司越近,我是越搬越远,但是直觉告诉我应该没有错,昨天晚上刚搬完家,收拾收拾终于了,坑爹的⼆房东再见,以后如果不出什么特殊情况的话应该是有时间写博客了。。。。
  好了废话不多说,进⼊正题,最近有个需求,要将xml转json之后存储在redis中,来去发现整体来说有两种⽅法,使⽤json-lib包中的net.sf.json或者使⽤org.json,这⾥将两种⽅式的实现代码写下来记录⼀下,以后⽅便拿来直接⽤了,省的来回了。
第⼀种⽅式json-lib,这种⽅式需要的依赖包⽐较多,具体需要以下jar包这个从⽹上下载既可以了或者是利⽤Maven指定好依赖即可
实现代码具体见下
public class Test {
public static void ConvertXMLtoJSON()  {
InputStream is = ResourceAsStream("l");
String xml;
try {
xml = String(is);
System.out.println(xml);
XMLSerializer xmlSerializer = new XMLSerializer();
JSON json = ad(xml);
System.out.println(json);
System.out.String(0));
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Test.ConvertXMLtoJSON();
}java xml是什么
}
简单解释下该代码,
  1 这⾥通过Class的getResourceAsStream⽅法获得指定⽂件的输⼊流,这⾥指定参数没有带/,表⽰Test类与xml⽂件在同⼀级⽬录下,如果有/那么是从根⽬录进⾏获取的,
  2 之后利⽤IOUtils的toString⽅法将该输⼊流转化为xml格式的字符串输出,调⽤XMLSerializer的read⽅法接受xml格式的字符串,将其转化为JSON对象
  3 这⾥实际上输出json对象和调⽤json对象的toString⽅法输出的形式在控制台展⽰的是⼀样的
  这⾥随便写了⼀个xml⽂件
<student name="zhangsan">
<sex>man</sex>
<age>18</age>
</student>
对应的输出的json
{"@name":"zhangsan","sex":"man","age":"18"}
这⾥只需要给出⼀个符合标准格式的xml⽂件即可,⼗分⽅便,如果是⼀个标签的属性那么会加上前缀@符号
public class JsonUtils {
public static String xml2jsonString() throws JSONException, IOException {
InputStream in = ResourceAsStream("l");
String xml = String(in);
JSONObject xmlJSONObj = JSONObject(xml);
String();
}
public static void main(String[] args) throws JSONException, IOException {
String string = xml2jsonString();
System.out.println(string);
}
}
简单对⽐⼀下使⽤json-lib的实现⽅式,前⾯的代码基本⼀致,区别是这⾥使⽤的是org.json.XML类,调⽤的是toJSONObject⽅法,接受的是⼀个xml格式的字符串,⽣成⼀个JSONObject对象,这⾥也是⼀样,调不调⽤jsonobject的toString⽅法输出效果都⼀样,xml⽂件内容⼀样,输出的格式见下
{"student":{"sex":"man","name":"zhangsan"}}
最后总结⼀下:
  1 json-lib依赖的jar包很多,需要全部集齐,org.json仅仅需要两个jar包即可实现,⼀个org.json另⼀个是commons-io
  2 两者输出的xml格式不同,前者不带根标签需要⼿动添加,会区别标签的属性和⼦标签,后者带有根标签,标签的属性和⼦标签不会区分对待,因此根据⾃⼰的实际情况⾃⾏选择修改即可。
  PS:如果还有其他的更好的xml转json⽅式,希望各位⼤神能告诉⼀下,再次先谢过了,那么这篇到此结束先了

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。