数据交换格式

2 篇文章 0 订阅

 

1 数据交换格式

数据交换格式(报文/参数列表),就是客户端与服务器常用的数据交换格式xml,json,html等,常用于面向接口开发。

json:一种轻量级数据交换格式。移动端(安卓、IOS)通讯方式采用http协议+JSON格式 走restful风格。很多互联网项目都采用Http协议+JSON。占用宽带小

xml:可扩展的标记语言,重量级交换格式。因为xml比较重WebService服务采用http+xml格式 银行项目使用比较多。

1.1 json

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,相比于xml这种数据交换格式来说,因为解析xml比较的复杂,而且需要编写大段的代码,所以客户端和服务器的数据交换格式往往通过JSON来进行交换。

样例:

{

    "id": "10",

    "name": "课程",

    "items": [

        {

            "itemId": "20",

            "itemName": 数学"

        },

        {

            "itemId": "21",

            "itemName": "化学"

        }

    ]

}

JSON:JavaScript 对象表示法(JavaScript Object Notation)。

JSON的形式是用大括号“{}”包围起来的项目列表,每一个项目间用逗号(,)分隔,而项目就是用冒号(:)分隔的属性名和属性值。这是典型的字典表示形式,也再次表明javascript里的对象就是字典结构。不管多么复杂的对象,都可以用一句JSON代码来创建并赋值。在JSON中,名称 / 值对包括字段名称(在双引号中),后面写一个冒号,然后是值

1.1.1 分类

1、对象:对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。

2、数组:数组在js中是中括号“[]”括起来的内容,数据结构为 ["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。
经过对象、数组2种结构就可以组合成复杂的数据结构了。

 

1.1.2 常用JSON解析框架

fastjson(阿里)、gson(谷歌)、jackson(SpringMVC自带)

1.1.2.1 fastjson解析json

添加依赖

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>fastjson</artifactId>

<version>1.1.43</version>

</dependency>

常用api:
public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray 
public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject    
public static final <T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean 
public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray 
public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合 
public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本 
public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本 
public static final Object toJSON(Object javaObject); //将JavaBean转换为JSONObject或者JSONArray。


例子:
public class FastJsonDemo {
    //json字符串
    static String json="{\"id\":\"10\",\"name\":\"课程\",\"items\":[{\"itemId\":\"20\",\"itemName\":\"数学\"},{\"itemId\":\"21\",\"itemName\":\"化学\"}]}";

    public static void main(String[] args) {
        JSONObject jsonObject = new JSONObject().parseObject(json);
        String id = jsonObject.getString("id");
        System.out.println("id:"+id);
        String name = jsonObject.getString("name");
        System.out.println("name:"+name);
        JSONArray items = jsonObject.getJSONArray("items");
        for (int i = 0; i < items.size(); i++) {
            JSONObject jsonObject1 = items.getJSONObject(i);
            String itemId=jsonObject1.getString("itemId");
            String itemName=jsonObject1.getString("itemName");
            System.out.println("itemId:"+itemId+",itemName:"+itemName);
        }
    }
}

输出:
id:10
name:课程
itemId:20,itemName:数学
itemId:21,itemName:化学

1.1.2.2 Json转对象

@Data
class Course{
    private String id;
    private String name;
    private List<Item> items;

    @Override
    public String toString() {
        return "Course{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", items=" + items +
                '}';
    }
}
@Data
class Item{
    private String itemId;
    private String itemName;

    @Override
    public String toString() {
        return "Item{" +
                "itemId='" + itemId + '\'' +
                ", itemName='" + itemName + '\'' +
                '}';
    }
}
public class FastJsonDemo2 {
    static String json="{\"id\":\"10\",\"name\":\"课程\",\"items\":[{\"itemId\":\"20\",\"itemName\":\"数学\"},{\"itemId\":\"21\",\"itemName\":\"化学\"}]}";
    public static void main(String[] args) {
        Course course = new JSONObject().parseObject(json,Course.class);//json转对象
        System.out.println(course.toString());
    }
}

输出:
Course{id='10', name='课程', items=[Item{itemId='20', itemName='数学'}, Item{itemId='21', itemName='化学'}]}

1.1.2.3 组装Json

public class Test01 {
    public static void main(String[] args) {
        JSONObject root=new JSONObject();
        root.put("id","20");
        root.put("name","课程");
        JSONArray jsonArray=new JSONArray();
        JSONObject jsonObject=new JSONObject();
        jsonObject.put("itemId","20");
        jsonObject.put("itemName","数学");
        JSONObject jsonObject2=new JSONObject();
        jsonObject2.put("itemId","21");
        jsonObject2.put("itemName","化学");
        jsonArray.add(jsonObject);
        jsonArray.add(jsonObject2);
        root.put("items",jsonArray);

        System.out.println(root.toJSONString());
    }
}

输出:
{"id":"20","items":[{"itemId":"20","itemName":"数学"},{"itemId":"21","itemName":"化学"}],"name":"课程"}

1.2 xml

它是可扩展标记语言(Extensible Markup Language,简称XML),是一种标记语言。XML 全称为可扩展的标记语言。主要用于描述数据和用作配置文件。

XML 文档在逻辑上主要由一下 5 个部分组成:

XML 声明:指明所用 XML 的版本、文档的编码、文档的独立性信息

文档类型声明:指出 XML 文档所用的 DTD

元素:由开始标签、元素内容和结束标签构成

注释:以结束,用于对文档中的内容起一个说明作用

处理指令:通过处理指令来通知其他应用程序来处理非 XML 格式的数据,格式为

XML 文档的根元素被称为文档元素,它和在其外部出现的处理指令、注释等作为文档实体的子节点,根元素本身和其内部的子元素也是一棵树。

样例:

<?xml version="1.0" encoding="UTF-8"?>
<students>
	<student1 id="001">
		<微信公众号>微信1</微信公众号>
		<学号>20140101</学号>
		<地址>广州</地址>
		<座右铭>要么强大,要么听话</座右铭>
	</student1>
	<student2 id="002">
		<新浪微博>微博1</新浪微博>
		<学号>20140102</学号>
		<地址>广州</地址>
		<座右铭>在哭泣中学会坚强</座右铭>
	</student2>
</students> 
</students> 

1.2.1 XML解析方式

Dom4j、Sax、Pull

1.2.2 Dom4j与Sax区别

 dom4j不适合大文件的解析,因为它是一下子将文件加载到内存中,所以有可能出现内存溢出,sax是基于事件来对xml进行解析的,所以他可以解析大文件的xml,也正是因为如此,所以dom4j可以对xml进行灵活的增删改查和导航,而sax没有这么强的灵活性,所以sax经常是用来解析大型xml文件,而要对xml文件进行一些灵活(crud)操作就用dom4j。

1.2.3使用dom4j解析xml

解析XML过程是通过获取Document对象,然后继续获取各个节点以及属性等操作,因此获取Document对象是第一步,大体说来,有三种方式:

1.自己创建Document对象

Document document = DocumentHelper.createDocument();

Element root = document.addElement("students");

其中students是根节点,可以继续添加其他节点等操作。

2.自己创建Document对象

// 创建SAXReader对象

SAXReader reader = new SAXReader();

// 读取文件 转换成Document

Document document = reader.read(new File("XXXX.xml"));

3.读取XML文本内容获取Document对象

String xmlStr = "<students>......</students>";

Document document = DocumentHelper.parseText(xmlStr);

1.2.4 解析xml代码

添加依赖:
<dependency>
    <groupId>dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>2.0.0</version>
</dependency>
xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<students>
	<student1 id="001">
		<微信公众号>微信1</微信公众号>
		<学号>20140101</学号>
		<地址>广州</地址>
		<座右铭>要么强大,要么听话</座右铭>
	</student1>
	<student2 id="002">
		<新浪微博>微博1</新浪微博>
		<学号>20140102</学号>
		<地址>广州</地址>
		<座右铭>在哭泣中学会坚强</座右铭>
	</student2>
</students> 

java代码:
public class Test003 {
    public static void main(String[] args) throws DocumentException {
        String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                "<students>\n" +
                "\t<student1 id=\"001\">\n" +
                "\t\t<微信公众号>微信1</微信公众号>\n" +
                "\t\t<学号>20140101</学号>\n" +
                "\t\t<地址>广州</地址>\n" +
                "\t\t<座右铭>要么强大,要么听话</座右铭>\n" +
                "\t</student1>\n" +
                "\t<student2 id=\"002\">\n" +
                "\t\t<新浪微博>微博1</新浪微博>\n" +
                "\t\t<学号>20140102</学号>\n" +
                "\t\t<地址>广州</地址>\n" +
                "\t\t<座右铭>在哭泣中学会坚强</座右铭>\n" +
                "\t</student2>\n" +
                "</students> ";
        Document document = DocumentHelper.parseText(xmlStr.replace("\n",""));
        Element rootElement=document.getRootElement();
        getNodes(rootElement);
    }

    public static void getNodes(Element rootElement){
        String name=rootElement.getName();
        System.out.println("节点名臣:"+name);
        // 获取属性ID
        List<Attribute> attributes = rootElement.attributes();
        for (Attribute attribute : attributes) {
            System.out.println("属性:" + attribute.getName() + "---" + attribute.getText());
        }
        if (!rootElement.getTextTrim().equals("")) {
            System.out.println(rootElement.getName() + "--" + rootElement.getText());
        }
        // 使用迭代器遍历
        Iterator<Element> elementIterator = rootElement.elementIterator();
        while (elementIterator.hasNext()) {
            Element next = elementIterator.next();
            getNodes(next);
        }


    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值