其实吧就是刚开始实习,老师傅让我接触的第一个东西嘿嘿,觉得不写个目的好像不太专业哦,然后写到博客也是为了增加自己的社交面,争取结交大佬,然后目前工作较为轻松,写写博客也算是丰富业余生活。
结合各大代码平台进行整合,找出了几个自己适用的方法实现转换,在这个复杂的社会学会“变通“”还是很有用的:
我使用的是Eclipse,jer是1.8的,嗯嗯…好像没说什么
(1).XML的优缺点
<1>.XML的优点
A.格式统一,符合标准;
B.容易与其他系统进行远程交互,数据共享比较方便。
<2>.XML的缺点
A.XML文件庞大,文件格式复杂,传输占带宽;
B.服务器端和客户端都需要花费大量代码来解析XML,导致服务器端和客户端代码变得异常复杂且不易维护;
C.客户端不同浏览器之间解析XML的方式不一致,需要重复编写很多代码;
D.服务器端和客户端解析XML花费较多的资源和时间。
(2).JSON的优缺点
<1>.JSON的优点:
A.数据格式比较简单,易于读写,格式都是压缩的,占用带宽小;
B.易于解析,客户端JavaScript可以简单的通过eval()进行JSON数据的读取;
C.支持多种语言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等服务器端语言,便于服务器端的解析;
D.在PHP世界,已经有PHP-JSON和JSON-PHP出现了,偏于PHP序列化后的程序直接调用,PHP服务器端的对象、数组等能直接生成JSON格式,便于客户端的访问提取;
E.因为JSON格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,且完成任务不变,并且易于维护。
<2>.JSON的缺点
A.没有XML格式这么推广的深入人心和喜用广泛,没有XML那么通用性;
B.JSON格式目前在Web Service中推广还属于初级阶段。
采用
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLEventWriter;
import javax.xml.stream.XMLOutputFactory;
import cn.hutool.json.JSONObject;
import cn.hutool.json.XML;
import de.odysseus.staxon.json.JsonXMLConfig;
import de.odysseus.staxon.json.JsonXMLConfigBuilder;
import de.odysseus.staxon.json.JsonXMLInputFactory;
import de.odysseus.staxon.xml.util.PrettyXMLEventWriter;
这是用的一些包,主要还是hutool工具箱
然后具体实现
/**
* xml String to JSONObject
*/
public static JSONObject xml2Json() {
String xml = "123 aaaaaa 21 "
+ "124 bbbbbb 22 ";
//使用hutool工具箱功能实现
JSONObject xmlJSONObj = XML.toJSONObject(xml);
// System.out.println(xmlJSONObj);
return xmlJSONObj;
}
好吧,好丑,为什么没有别人的代码段华丽…
然后测试一下
public static void main(String[] args) {
JSONObject json = xml2Json();
System.out.println("得到的json串:\n" + json);
}
直接上代码,我当时两个方法写在一起了
/**
* json String to xml String
*/
public static String json2xml(String json) {
// String作为数据源
// StringReader 是读, 从一个String中读取,所以需要一个String ,通过构造方法传递
// StringWriter 是写, 写入到一个String中去,所以它内部提供了一个StringBuffer(便于修改字符串)中用来保存数据
StringReader input = new StringReader(json);
StringWriter output = new StringWriter();
JsonXMLConfig config = new JsonXMLConfigBuilder().multiplePI(false).repairingNamespaces(false).build();
try {
XMLEventReader reader = new JsonXMLInputFactory(config).createXMLEventReader(input);
XMLEventWriter writer = XMLOutputFactory.newInstance().createXMLEventWriter(output);
writer = new PrettyXMLEventWriter(writer);
writer.add(reader);
reader.close();
writer.close();
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
output.close();
input.close();
}catch(Exception e) {
e.printStackTrace();
}
}
// if (output.toString().length() >= 38) {// remove
// System.out.println(output.toString().substring(39));
// return output.toString().substring(39);
// }
return output.toString();
}
最后一部分注释掉了,这个根据大家的需求看吧
测试一下,这个是写了一个串,包含了许多数组啊什么的自认为复杂的串…
public static void main(String[] args) {
String jsonStr1 =
"{\"student1\":\r\n" +
" {\"name\":\"aaa\",\"age\":20,\"home\":\"nxyc\",\r\n" +
" \"subject\":[\r\n" +
" {\"subjectName\":\"sjjg\",\"teacher\":\"wxp\",\"time\":16,\r\n" +
" \"location\":[\"yijiao\",\"bizong\",\"Llou\"]},\r\n" +
" {\"subjectName\":\"mxdx\",\"teacher\":\"mzr\",\"time\":16},\r\n" +
" {\"subjectName\":\"jsjwl\",\"teacher\":\"wh\",\"time\":16}\r\n" +
" ],\r\n" +
" \"hobby\":[\r\n" +
" {\"hname\":\"basketball\"},\r\n" +
" {\"hname\":\"football\"}\r\n" +
" ],\r\n" +
" \"sites\":[\"baidu\",\"taobao\",\"google\"]\r\n" +
" },\r\n" +
" \"student2\":\r\n" +
" {\"name\":\"bbb\",\"age\":22,\"home\":\"nxwz\",\r\n" +
" \"subject\":{\"subject1\":\"rjgc\",\"subject2\":\"rjtxjgs\"}}\r\n" +
"}";
String xml = json2xml(jsonStr1);
System.out.print("得到的xml串:\n" + xml);
}
JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。
简介原文链接:https://blog.csdn.net/wn084/article/details/80853587
@XmlRootElement
public class Student {
@XmlElement
private String id;
@XmlElement
private String name;
@XmlElement
private String age;
@XmlTransient
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@XmlTransient
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlTransient
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String toString() {
return "Student [id=" + id + ",name=" + name + ",age=" + age + "]";
}
}
适用JAXB中的方法实现
public static void xml2Bean() {
// String xml = "123 aaaaaa 21 ";
String xml = "123 aaaaaa 21 ";
// System.out.println("初始输入xml String\n" + xml);
try {
// File file = new File("E:\\student.xml");
StringReader read = new StringReader(xml); //读取字符串
// JAXB(即Java Architecturefor XML Binding)是一个业界的标准,
// 即是一项可以根据XML Schema产生Java类的技术。
// 该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,
// 并能将Java对象树的内容重新写到XML实例文档。
JAXBContext jaxbC = JAXBContext.newInstance(Student.class); //创建jaxbc结构为Student.class
Unmarshaller us = jaxbC.createUnmarshaller();
// unmarshal()是把xml对象转化为我们需要的java对象的方法
Student stu1=(Student)us.unmarshal(read); //格式要求???
System.out.println("得到的JavaBean:\n" + stu1.toString());
} catch (JAXBException e) {
e.printStackTrace();
}
// Student stu = convertToJavaBean(xml,Student.class);
}
这里有三个。①通过JAXB实现转换。②使用XStream转单个Bean。③使用XStream转ListBean
有些懒,和XML2JavaBean的没有分开
try {
// File file = new File("E:\\student.xml");
StringReader read = new StringReader(xml); //读取字符串
// JAXB(即Java Architecturefor XML Binding)是一个业界的标准,
// 即是一项可以根据XML Schema产生Java类的技术。
// 该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,
// 并能将Java对象树的内容重新写到XML实例文档。
JAXBContext jaxbC = JAXBContext.newInstance(Student.class); //创建jaxbc结构为Student.class
Unmarshaller us = jaxbC.createUnmarshaller();
// unmarshal()是把xml对象转化为我们需要的java对象的方法
Student stu1=(Student)us.unmarshal(read); //格式要求???
System.out.println("得到的JavaBean:\n" + stu1.toString());
JAXBContext context = JAXBContext.newInstance(stu1.getClass());//使用对象生成xml
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,Boolean.TRUE);
StringWriter output = new StringWriter();
marshaller.marshal(stu1, output);
System.out.println("方法一得到的xml:\n" + output);
} catch (JAXBException e) {
e.printStackTrace();
}
/**
* javaBean to xml method two
*/
public static void Bean2xml() {
Student stu = new Student();
stu.setId("123");
stu.setName("bbbbbb");
stu.setAge("22");
XStream xStream = new XStream();
xStream.alias("student", Student.class);
// xStream.aliasPackage("com.change.entry.Student", "student");
// xStream.alias("id", Student.class);
// xStream.alias("name", Student.class);
// xStream.alias("age", Student.class);
String s = xStream.toXML(stu);
System.out.println("方法2得到的xml:\n" + s);
}
/**
* javaBean to xml
* javaBean List
*/
public static void Bean2xml2() {
Student stu1 = new Student();
Student stu2 = new Student();
Student stu3 = new Student();
Student stu4 = new Student();
stu1.setId("111");
stu2.setId("222");
stu3.setId("333");
stu4.setId("444");
stu1.setName("aaaaaa");
stu2.setName("bbbbbb");
stu3.setName("cccccc");
stu4.setName("cccccc");
stu1.setAge("21");
stu2.setAge("22");
stu3.setAge("23");
stu4.setAge("24");
ArrayList list = new ArrayList();
list.add(stu1);
list.add(stu2);
list.add(stu3);
list.add(stu4);
// System.out.println("123"+list.get(3));
XStream xStream = new XStream();
xStream.alias("student", Student.class);
// xStream.aliasPackage("com.change.entry.Student", "student");
// xStream.alias("id", Student.class);
// xStream.alias("name", Student.class);
// xStream.alias("age", Student.class);
String s = xStream.toXML(list);
System.out.println("方法2得到的xml:\n" + s);
}
/**
* javaBean to json String
* 一个Student的实体类,
* 使用了JSONObject和JSONArray两种方式转化为JSON字符串
*/
public static void javaBean2json() {
Student stu = new Student();
stu.setId("123");
stu.setName("JSON");
stu.setAge("22");
JSONObject json = JSONObject.fromObject(stu);
JSONArray array = JSONArray.fromObject(stu);
String jsonStr = json.toString();
String arrayStr = array.toString();
System.out.println("得到的jsonStr:" + jsonStr);
System.out.println("得到的arrayStr:" + arrayStr);
}
/**
* json to javaBean
*/
public static void json2javaBean() {
// {"name":"JSON","id":"123","age":"22"}
String ObjectStr = "{\"name\":\"JSON\",\"id\":\"123\",\"age\":\"22\"}";
String arrayStr = "[{\"id\":\"123\",\"name\":\"JSON\",\"age\":\"22\"}]";
//转为json串
JSONObject json1 = JSONObject.fromObject(ObjectStr);
Student stu1 = (Student)JSONObject.toBean(json1, Student.class);
System.out.println("得到的stu1:" + stu1);
//转为json数组
JSONArray jsonArray = JSONArray.fromObject(arrayStr);
Object o = jsonArray.get(0);
JSONObject json2 = JSONObject.fromObject(o);
Student stu2 = (Student)JSONObject.toBean(json2,Student.class);
System.out.println("得到的stu2:" + stu2);
}
第一次写有些对不起读者啊,后面基本就是码代码了,没有什么实质性的内容,不过还是希望给新人一些支持,我要做祖国的花朵,需要你们的灌溉哈哈。
<很抱歉,当时写代码的时候没有考虑会写博客这个东西,然后参考了很多人的,也没有留下链接,希望原创有发现的可以告我一声,这个玩意后期应该可以修改的吧,或者我重发也可以>