2021-04-06

目录

 

网络数据传输

     为什么学习xml?

SAX  (逐行驱动) 

DOM   解析方式         支持Xpath:books//book//name

lib导入jar包却无法编译?

DOM 4j  - XPATH解析 XML

聚合数据     

JSON:   JavaScript   (和大哥Java没有关系,只是蹭Java热度)

Json  解析

匿名对象方法 toJson

HashMap中的page看似为数组,实则是ArrayList

Fast Json  国内常用 (建议与团队保持一致)

接受对象,打印对应的info

转换数组 


网络数据传输

     为什么学习xml?

             XML具有平台无关性

       比如:   配置文件   

       具体:<name>Allen </name>

 

只有一个根标记

  <?xml version="1.0" encoding="UTF-8"?>

<books>

      <book id="1001">

            <name>幸福的勇气</name>          

            <info>勇敢去发现生活中的美,让自己值得</info>

      </book>      

       <book id="1002">

            <name>被讨厌的勇气</name>

            <info>做自己,学会课题分离,让心轻装上阵</info>

       </book>

</books>

2021-04-06

 

 

CDATA语法  里的xml内容不会被解析

Java有几种解析方式? 四种    最主要的有DOM4J

 

SAX  (逐行驱动) 

  优点:不需占过大内存, 找到目标即可

  劣势:无法返回,单线程

 

 

和   2021-04-06

 

 

DOM   解析方式         支持Xpath:books//book//name

优势:文档完整加载,允许修稿

         双向访问,双向解析

劣势:如果xml过大,内存消耗量过大

 

xml解析

引入jar文件  demo4j.jar

lib导入jar包却无法编译?

    Modules的dependencies是否配置正确,下图步骤

2021-04-06

 

2021-04-06

2021-04-06

2021-04-06

2021-04-06

 

 

DOM 4j  - XPATH解析 XML

路径表达式

优势:针对大量的文件可以很方便的进行查询操作

查找所有的name节点

 

方法一:

List<Node> names = doc.selectNodes("//book[@id='1002']//name");

for (int i = 0 ;i<names.size();i++){

System.out.println(names.get(i).getName());

System.out.println(names.get(i).getText());

}

方法二:

Node n = doc.selectSingleNode("//book[@id='1002']//name");

System.out.println(n.getName()+":"+n.getText());

 

聚合数据     
 

package XMLDemo;

//

import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.dom4j.Element;

import org.dom4j.Node;

import org.dom4j.io.SAXReader;



import java.io.IOException;

import java.io.InputStream;

import java.net.URL;

import java.net.URLConnection;



/**

* @Author:Allen

* @Date:4/1/2021 10:59 AM

*/

public class Demo4 {

public static void main(String[] args) throws IOException, DocumentException {

String phone = "15868253582";

//定义URL实例

URL url = new URL("http://apis.juhe.cn/mobile/get?phone=" + phone + "&dtype=xml&key=9f3923e8f87f1ea50ed4ec8c39cc9253");

//获取urlconnection连接

URLConnection urlConnection = url.openConnection();

//从url中读取流对象

InputStream inputStream = urlConnection.getInputStream();



SAXReader saxReader = new SAXReader();

Document doc = saxReader.read(inputStream);

Node node = doc.selectSingleNode("//company");

System.out.println("这是运营商: "+node.getText());



/* 1.获取流对象 InputStream is = urlConnection.getInputStream();

2.逻辑:通过xml读取对象,读取数据,返回文档对象

解析文本内容

3 读取根节点的文本内容 resultcode 如果200 是符合的,那么接着

解析result结果,去获得省份,城市,判断是否相等后,输出号码的归属地*/



}

}

 

 

 

 

JSON:   JavaScript   (和大哥Java没有关系,只是蹭Java热度)

  Yahoo 与  Google主推         更方便程序员的使用

  class Book{

   private String name;

   private String info;

   get/set 



}

Book b = new Book();

b.setName();

b.setInfo();

····



JS:

var  b  = new Object();

b.name="";

b.info="";



Xml:

<book>

   <name></name>

   <info></info>

</book>



Json:

 {

      "name":"",

      "info":""

  }



{}  表示 object

 

Json  解析

package JasonDemo;



import com.google.gson.Gson;



/**

* @Author:Allen

* @Date:4/6/2021 8:19 PM

*/

public class Demo1 {

public static void main(String[] args) {

//1. 创建Gson对象

Gson g = new Gson();

//2. 转换

//Book b = new Book("1","《我曾走在崩溃边缘》","每一个不曾起舞的日子,都是对生命的辜负。");

Book b = g.fromJson("{\"id\":\"1\",\"name\":\"《我曾走在崩溃边缘》\",\"info\":\"每一个不曾起舞的日子,都是对生命的辜负。\"}",Book.class);



//String s = g.toJson(b);

System.out.println(b.getInfo());

}

}

 

 

匿名对象方法 toJson

package JasonDemo;

import com.google.gson.Gson;

/**

* @Author:Allen

* @Date:4/6/2021 8:32 PM

*/

public class Demo2 {

public static void main(String[] args) {

// Gson g = new Gson();

Book b1 = new Book("2","《非线性成长》","突破自己,成就不凡");

String s =new Gson().toJson(b1);

System.out.println(s);



}

}

2021-04-06

 

 

HashMap中的page看似为数组,实则是ArrayList

package JasonDemo;



import com.google.gson.Gson;



import java.util.HashMap;

import java.util.List;



/**

* @Author:Allen

* @Date:4/6/2021 8:38 PM

*/

public class Demo3 {

public static void main(String[] args) {

Gson g = new Gson();

// Book b = new Gson().fromJson("",Book.class);

HashMap data = g.fromJson("{\"id\":\"1\",\"name\":\"《我曾走在崩溃边缘》\",\"info\":\"每一个不曾起舞的日子,都是对生命的辜负。\",\"page\":[为天地立心,为生民立命,为往圣继绝学,为万世开太平]}",HashMap.class);

List list= (List) data.get("page");

System.out.println(list.get(1));

}

}

 

Fast Json  国内常用 (建议与团队保持一致)

package JasonDemo;



import com.alibaba.fastjson.JSON;



/**Fast json Alibaba

* @Author:Allen

* @Date:4/6/2021 8:51 PM

*/

public class Demo4 {

public static void main(String[] args) {

Book b1 = new Book("4","《如何系统思考》","练脑修心勤身");

String json = JSON.toJSONString(b1);

System.out.println(json);

}

}

接受对象,打印对应的info

package JasonDemo;



import com.alibaba.fastjson.JSON;



import java.lang.reflect.Type;



/**

* @Author:Allen

* @Date:4/6/2021 8:57 PM

*/

public class Demo5 {

public static void main(String[] args) {



Book s = JSON.parseObject("{\"id\":\"4\",\"info\":\"练脑修心勤身\",\"name\":\"《如何系统思考》\"}", Book.class);

System.out.println(s.getInfo());



}

}

 

转换数组 

  String.class 

package JasonDemo;



import com.alibaba.fastjson.JSON;



import java.lang.reflect.Type;

import java.util.List;



/** Fast Json 解析

* @Author:Allen

* @Date:4/6/2021 9:03 PM

*/

//{"id":"4","info":"练脑修心勤身","name":"《如何系统思考》"}



//["Apple","Microsoft","Google"]

public class Demo6 {

public static void main(String[] args) {

List<String> s = JSON.parseArray("[\"Apple\",\"Microsoft\",\"Google\"]", String.class);

System.out.println(s.get(2));



}

}

 

 

 

 

 

 

上一篇:gson转json


下一篇:用Gson 实体类转换ZonedDateTime类型