数据交换格式中,最核心的就是Json和XML。 其中,Json是一种轻量级数据交换格式,XML是一种重量级的数据交换格式。 相比于xml这种数据交换格式来说, 因为解析xml比较的复杂,而且需要编写大段的代码, 所以客户端和服务器的数据交换格式往往通过JSON来进行交换。
常用的json框架为: fastjson(阿里)、gson(谷歌)、jackson(SpringMVC自带) 其中,服务器端开发常用fastjson,安卓开发常用gson。
常用的XML解析方式: Dom4j、Sax、Pull 其中,dom4j不适合大文件的解析,因为它是一下子将文件加载到内存中,所以有可能出现内存溢出,sax是基于事件来对xml进行解析的,所以他可以解析大文件的xml,也正是因为如此,所以dom4j可以对xml进行灵活的增删改查和导航,而sax没有这么强的灵活性,所以sax经常是用来解析大型xml文件,而要对xml文件进行一些灵活(crud)操作就用dom4j。
maven
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.52</version>
</dependency>
<!-- lombok是为了使用@Data注解,省去set/get方法 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
</dependency>
code
package cn.qbz.thread;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import java.util.List;
public class Test112001 {
public static void main(String[] args) {
String str = "{\"name\":\"BeJson\",\"url\":\"http://www.bejson.com\",\"page\":88,\"isNonProfit\":true,\"address\":{\"street\":\"科技园路.\",\"city\":\"江苏苏州\",\"country\":\"中国\"},\"links\":[{\"name\":\"Google\",\"url\":\"http://www.google.com\"},{\"name\":\"Baidu\",\"url\":\"http://www.baidu.com\"},{\"name\":\"SoSo\",\"url\":\"http://www.SoSo.com\"}]}";
JSONObject jsonStr = JSONObject.parseObject(str);
System.out.println("name:" + jsonStr.getString("name"));
System.out.println("page:" + jsonStr.getIntValue("page"));
System.out.println();
JSONArray links = jsonStr.getJSONArray("links");
JSONObject link = links.getJSONObject(0);
System.out.println("name:" + link.getString("name") + "\t" + "url:" + link.getString("url"));
System.out.println();
Test test = JSONObject.parseObject(str, Test.class);
System.out.println("test.address.city:" + test.getAddress().getCity());
System.out.println("test.name:" + test.getName());
System.out.println();
List<LinksTest> linksTests = JSONObject.parseArray(links.toJSONString(), LinksTest.class);
System.out.println("links.size:" + linksTests.size());
System.out.println("links[0].url:" + linksTests.get(0).getUrl());
System.out.println();
String testStr = JSONObject.toJSONString(test);
System.out.println(testStr);
System.out.println();
JSONObject addressJson = (JSONObject) JSONObject.toJSON(test.getAddress());
System.out.println("addressJson.city:" + addressJson.getString("city"));
System.out.println();
JSONArray linksArray = (JSONArray) JSONObject.toJSON(test.getLinks());
System.out.println("links[0].name:" + linksArray.getJSONObject(0).getString("name"));
System.out.println();
JSONObject jsonObject = new JSONObject();
jsonObject.put("name","name");
JSONObject address = new JSONObject();
address.put("city","city");
jsonObject.put("address",address);
JSONArray linksA = new JSONArray();
JSONObject linkJ = new JSONObject();
linkJ.put("name","name2");
linksA.add(linkJ);
jsonObject.put("links",linksA);
System.out.println(jsonObject.toJSONString());
}
@Data
static class Test {
private String name;
private String url;
private Integer page;
private Boolean isNonProfit;
private AddressTest address;
private List<LinksTest> links;
}
@Data
static class AddressTest {
private String street;
private String city;
private String country;
}
@Data
static class LinksTest {
private String name;
private String url;
}
}
maven
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
测试数据
<?xml version="1.0" encoding="UTF-8" ?>
<test id="test">
<name>name1</name>
<url>http://www.baidu.com</url>
<address id="address">
<city>address_city</city>
</address>
<links name="links">
<link id="link0">
<name>link0_name</name>
<url>link0_url</url>
</link>
</links>
</test>
code
package cn.qbz.thread;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.Iterator;
import java.util.List;
public class Test112002 {
public static void main(String[] args) throws DocumentException {
SAXReader saxReader = new SAXReader();
Document read = saxReader.read(new File("E:\\workspace\\jiuerxueyuan\\test\\src\\main\\java\\cn\\qbz\\thread\\test.xml"));
//获取根节点
Element rootElement = read.getRootElement();
getNodes(rootElement);
}
private static void getNodes(Element rootElement) {
System.out.println("当前节点名称:" + rootElement.getName());
//获取属性
List<Attribute> attributes = rootElement.attributes();
for (Attribute attribute : attributes) {
System.out.println("属性:" + attribute.getName() + "---" + attribute.getText());
}
//获取当前节点的内容
if (!"".equals(rootElement.getTextTrim())) {
System.out.println(rootElement.getName() + "---" + rootElement.getText());
}
//递归获取其子节点下的内容
Iterator<Element> elementIterable = rootElement.elementIterator();
while (elementIterable.hasNext()) {
Element next = elementIterable.next();
getNodes(next);
}
}
}
Xml是重量级数据交换格式,占宽带比较大。 JSON是轻量级交换格式,xml占宽带小。 所有很多互联网公司都会使用json作为数据交换格式 很多银行项目,有些还是在使用xml。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有