数据交换格式Json与XML
什么是数据交换格式:
主流的有Json、XML、HTML。
数据交换格式的应用场景:
移动端(安卓,IOS)通讯方式采用http协议+Json格式的restful风格。
很多互联网公司都是用Http协议+Json格式。
因为XML比较重WebService服务采用Http协议+XML格式的银行项目使用比较多。
什么是Json数据交换格式:
Json:相对于XML来说是一种轻量级数据交换格式。因为XML比较复杂,需要大量代码,所以客户端和服务器端数据交换通常使用Json来交换。
XML:是一种重量级的数据交换格式(标记语言)。
Json的基本语法:
|
{ "id": "小马", "name": "男", "itemts": [{ "ids": "小米", "name": "没峨眉" }, { "id": "29", "sex": "女" }] } |
Java操作Json有哪些框架?
Gson(谷歌),fastjson(阿里巴巴)----主流,jackson(Springmvc)
第一种是直接使用Json中的方法进行解析:
首先新建一个maven工程,导入fastjson包。
|
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency> |
新建一个TestDemo:
|
public class TestDemo { static String json="{\"id\": \"小马\",\"name\": \"男\",\"itemts\": [{\"id\": \"小米\",\"name\": \"没峨眉\"}, {\"id\": \"29\",\"name\": \"女\"}]}"; public static void main(String[] args) { JSONObject jsonObject=new JSONObject().parseObject(json); String id=jsonObject.getString("id"); String name=jsonObject.getString("name"); System.out.println(id+","+name); JSONArray array=jsonObject.getJSONArray("itemts"); for(int i=0;i<array.size();i++) { JSONObject object=array.getJSONObject(i); String ids=object.getString("ids"); String names=object.getString("name"); System.out.println(ids+","+names); } } } |
以上这种方式太过麻烦,很少公司使用,一般使用对象封装好之后,直接拿来用。
首先新建一个User类。注意:User类里面的属性与Json中的对象一致
|
public class User { private String id; private String name; private List<Itemts> itemts; } 加上get跟set和toString方法 |
再新建一个Itemts类:
|
public class Itemts { private String id; private String name; } 也是加上get、set、toString方法。 |
新建一个测试类
|
public class TestDemo { static String json="{\"id\": \"小马\",\"name\": \"男\",\"itemts\": [{\"id\": \"小米\",\"name\": \"没峨眉\"}, {\"id\": \"29\",\"name\": \"女\"}]}"; public static void main(String[] args) { //使用对象的方式解析json,使用的方便,广泛。 User user=new JSONObject().parseObject(json, User.class); System.out.println(user.toString()); } } |
第二种是使用类的方式封装json,还是使用以上的User跟Itemts类。
|
public class TestDemo2 { public static void main(String[] args) { JSONObject root=new JSONObject(); root.put("id","10"); root.put("name", "小米"); JSONArray array=new JSONArray(); JSONObject object1=new JSONObject(); object1.put("itemts", "29"); object1.put("itemtsName", "小马"); JSONObject object2=new JSONObject(); object2.put("itemts", "38"); object2.put("itemtsName", "小红"); //把对象放进数组里面 array.add(object1); array.add(object2); //把数组放进对象里面 root.put("itemt", array); System.out.println(root.toString()); }} |
还有另一种实体类封装Json字符串
|
public class TestDemo2 { public static void main(String[] args) { //使用实体类封装json字符串 User user=new User(); user.setId("29"); user.setName("小马"); List<Itemts> list=new ArrayList<Itemts>(); Itemts itemts1=new Itemts(); itemts1.setId("28"); itemts1.setName("小红"); Itemts itemts2=new Itemts(); itemts2.setId("34"); itemts2.setName("小和"); list.add(itemts1); list.add(itemts2); user.setItemts(list); System.out.println(user.toString()); } } |
Json到此就告一段落。
XML解析方式:
什么是XML?
XML全程是:可扩展的标记语言,主要用于描述数据和用作配置文件。
XML声明:指明所用XML的版本,文档的编码,文档的独立性信息。
文档类型声明:指出XML文档所用的DTD
元素:有开始标签,元素内容和结束标签构成。
注释:以结束,用于对文档中的内容起到一个解释的作用。
处理指令:通过处理指令来通知其他应用程序来处理非XML格式的数据,格式为XML文档的根元素被称为文档元素,它和在其外部出现的处理指令,注释等作为文档实体字节点,根元素本身与其内部的子元素也是一棵树。
XML样例:
|
<?xml version="1.0" encoding="UTF-8"?> <students> <student1 id="001"> <property>houe ary you</property> </student1> <student2 id="002"> <property>houe ary you2</property> </student2> </students> |
XML解析方式?
Dom4j、Sax、Pull三种常用的。
Dom4j与Sax区别
dom4j不适合大文件的解析,因为它是一下子将文件加载到内存中,所以有可能出现内存溢出,sax是基于事件来对xml进行解析的,所以他可以解析大文件的xml,也正是因为如此,所以dom4j可以对xml进行灵活的增删改查和导航,而sax没有这么强的灵活性,所以sax经常是用来解析大型xml文件,而要对xml文件进行一些灵活(crud)操作就用dom4j。
使用Dom4j解析xml代码:
首先添加dom4j的jar包
|
<dependency> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> <version>2.1.1</version> </dependency> |
Java代码
|
public class TestXML { public static void main(String[] args) throws DocumentException { SAXReader reader=new SAXReader(); //读取文件目录 Document read = reader.read("E:\\student.xml"); //得到文件根节点 Element rootElement = read.getRootElement(); getNods(rootElement); } static void getNods(Element rootElement) { //得到根节点名称 String name = rootElement.getName(); System.out.println("根节点名称"+name); //把子节点放进List集合里 List<org.dom4j.Attribute> attributes = rootElement.attributes(); for (org.dom4j.Attribute attribute : attributes) { System.out.println("节点名称"+attribute.getName()+"节点属性"+attribute.getValue()); } String value=rootElement.getTextTrim().trim(); if(!value.equals("")) { System.out.println("节点的值是"+value); } //使用迭代器遍历子节点 Iterator<Element> elementIterator = rootElement.elementIterator(); while(elementIterator.hasNext()) { Element next = (Element) elementIterator.next(); getNods(next); } } } |
结果是

数据交换格式Json与XML的更多相关文章
- 数据交换格式 —— JSON(JavaScript Object Notation)
当请求 headers 中,添加一个name为 Accept,值为 application/json 的 header(也即"我"(浏览器)接收的是 json 格式的数据),这样, ...
- 数据交换格式 JSON
1. 什么是 JSON 概念 : JSON 的英文全称是 JavaScript ObjEct Notation, 即 "JavaScript 对象表示法" . 简单来讲 : JSO ...
- 常用两种数据交换格式之XML和JSON的比较
目前,在web开发领域,主要的数据交换格式有XML和JSON,对于XML相信每一个web developer都不会感到陌生: 相比之下,JSON可能对于一些新步入开发领域的新手会感到有些陌生,也可能你 ...
- XML和JSON两种数据交换格式的比较
在web开发领域,主要的数据交换格式有XML和JSON,对于在 Ajax开发中,是选择XML还是JSON,一直存在着争议,个人还是比较倾向于JSON的.一般都输出Json不输出xml,原因就是因为 x ...
- Java 常见数据交换格式——xml、json、yaml
目录 数据交换格式介绍 XML 使用DOM方式解析 使用SAX方式解析 使用DOM4J方式解析 使用JDOM方式解析 JSON 使用JSONObject方式将数据转换为JSON格式 利用JSONObj ...
- 数据交换格式XML和JSON对比
1.简介: XML:extensible markup language,一种类似于HTML的语言,他没有预先定义的标签,使用DTD(document type definition)文档类型定义来组 ...
- 【学习】006数据交换格式与SpringIOC底层实现
课程目标 XML和JSON Java反射机制 手写SpringIOC 什么是数据交换格式 客户端与服务器常用数据交换格式xml.json.html 数据交换格式用场景 移动端(安卓.IOS)通讯方式采 ...
- 两种常用的数据交换格式:XML和JSON
不同编程语言之间的数据传输,需要一种通用的数据交换格式,它需要简洁.易于数据储存.快速读取,且独立于各种编程语言.我们往往传输的是文本文件,比如我们都知道的csv(comma seperated va ...
- 在.NET使用JSON作为数据交换格式
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://zhoufoxcn.blog.51cto.com/792419/517093 我们 ...
随机推荐
- struts2--Basic(一)
Struts是流行和成熟的基于MVC设计模式的WEB应用程序框架. 帮助我们减少在运用MVC设计模式来开发Web应用的时间. 1.下载添加jar包 2. 准备配置文件 web.xml <filt ...
- 我对java的理解(二)——反射是小偷的万能钥匙
在我们生活中,车上或者路上有时候会遇到一种很讨厌的人——“小偷”,趁我们不注意或者疏忽的时候拿走属于我们的东西.更有甚者,趁我们不在家的时候,手持一把万能钥匙,打开我们的房门,悠闲的查看房间的布置,翻 ...
- 6_State 游戏开发中使用状态机
### State 不好的代码 ``` //处理玩家输入的代码 void Heroine::handleInput(Input input) { if (input == PRESS_B) { if ...
- 【LeetCode】020. Valid Parentheses
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...
- Anthem.NET的 "Bad Response" 问题,及脚本调试技巧小结
今天解决了一位朋友使用 Anthem.NET 遇到的问题.他的代码在 Windows XP 的开发机器上反应正常,而部署到 2003 Server 的服务器上就提示 "BADRESPONSE ...
- Chrome Developer Tools之内存分析
可参考: Chrome Developer Tools之内存分析 http://www.kazaff.me/2014/01/26/chrome-developer-tools%E4%B9%8B%E5% ...
- Android 开发:开源库Speex支持arm64的动态库文件
随着处理器制造工艺的不断进步,和Android系统的不断发展,最近出了arm64-v8a的架构,由于项目中用到了speex的第三方语音编解码的动态库,其他架构的处理器暂不用说,一切正常,唯独到arm6 ...
- ES6学习之Reflect
Reflect对象与Proxy对象一样,也是 ES6 为了操作对象而提供的新 API Reflect设计目的: 将Object对象的一些明显属于语言内部的方法(比如Object.definePrope ...
- 针对nginx的内核优化
关于内核参数的优化: net.ipv4.tcp_max_tw_buckets = 6000timewait的数量,默认是180000.net.ipv4.ip_local_port_range = 10 ...
- Loadrunner 监控 Linux (centos6.5)服务器系统资源
Loadrunner 监控 Linux 服务器系统资源,需要在被监控的服务器上启用 rstatd 进程但尝试启动时,爆炸了: [root@test1 rpc.rstatd-4.0.1]# rpc.rs ...