解析JSON

解析JSON

铭记:访问外界和向外界写入数据都是通过流的的方式

解析XML:
- SAXReader类

生成XML:
- XMLWriter类 DocumentHelper类
- XStream类

解析和生成JSON:
- GSon类
- JSON类

了解XML

  • 语法:
    文档声明:<?xml version = "1.0" encoding = "UTF-8" ?>
    由“<标明名>“开始,以</标明名>结束,标明名可以自定义,可以嵌套,但不能嵌套标明的一半。一个.XML只允许有一个根标明。
如:
      <person></person>    正确
      <person>  <age> </person> </age>    错误
  • 命名规范:
1.标明名可以包含英文和数字,其他字符
2.标明名不能由XML,Xml,xml,标点符号,数字开头
3.标明名中不能由空格和冒号
4.标明名要区分大小写

- 解析XML常用方法:

```

- SAXReader类:
   read()		读取为文档
   		
-操作文档的节点:
			getRootElement()			获取文档的根节点
			elements()					获取节点的子节点集合,数据类型为List<Element>
			element(String Nodename)	获取指定节点
			getName()			   		 获取节点名
			getText()					获取节点内容
			elementText(String node)	获取指定节点的内容
			setText()					设置节点内容
		   attributeValue(String attributeName)     			获取节点属性值
		   addAttribute(String attributeName ,String attributeValue)  	 给节点设置属性
		   addElement(String Node)			添加节点
		   
- XPATH操作节点:  
			例如:“//hobby0[@id="hobby]”
			语法:
			/	:	从根节点开始
			//	:	从当前节点开始找查后代节点
			.	:	找查当前节点
			..	:	找查该节点的父节点
			@	:选择属性  
					使用方式:[@属性名=“值”]
   方法:注意必须操作的是根节点
   		selectSingleNode("路径表达式")		找查匹配的单个节点
   		selectNodes("路径表达式")			找查节点的子节点
```

- 解析XLM的步骤:
```
一想到解析XML就要用到:SAXReder类
1.获取.xml文件输入流FileInputStream类
   		FileInputStream  flie = new FileStream("xml文件路径")

2.实例化解析xml的类:SAXReader 类
   	 	SAXReader reader = new SAXReader();

3.解析xml	
 			Document document = reader.read(file);

4.获取根节点:
   		Element element = document.getRootElement();

5.根据节点等方法得到数据;
```

案例:

```
 - 案例一:
		public class Task1 {
		        /**
		         * 解析XML文件
		         * 
		         * one.xml文件:
		         * 
		         * <?xml version="1.0" encoding="UTF-8" ?>
		         * 	<preson>
		         *      <name>墨染</name>
		         *      <age>18岁</age>
		         *       <hobby0>
				 *	       <hobby1>羽毛球</hobby1>
				 *	       <hobby2>乒乓球</hobby2>
				 *	       <hobby3>排球</hobby3>
				 *	       <hobby4>篮球</hobby4>
		  		 * 		</hobby0>
				 *	</preson>
				 *
		         * */
			public static void main(String[] args) throws FileNotFoundException, DocumentException {
				FileInputStream p = new FileInputStream("out\\one.xml");  //获取XML输入流
				SAXReader s = new SAXReader();    //实例XML解析工具
				Document d = s.read(p);        //读取为文档
				Element e = d.getRootElement();  //获得根节点
			    List<Element> l = e.elements();  //获取根节点下的子节点
			    ListIterator<Element> i = l.listIterator();  //获取List集合迭代器
			    String g = null;  //记录hobby0
			    String o = null;  //记录子节点名
			   p: while(i.hasNext()) {
			    	o=i.next().getName();
			    	if(o.equals("hobby0")) {
			    		g = o;
			    		break p;
			    	}
			    	System.out.println(e.elementText(o));
			   }
			    Element kk= e.element(g);      //获取hobby0节点
			    List<Element> jj= kk.elements();   //获取hobby0节点的子节点
			     for(Element as : jj) {
			    	 System.out.println(as.getText());
			     }
			     p.close();   //关闭流
			}
		}
		
 - 案例二		XPATH
 		
 	
```

生成XML的步骤

```
**一想到要生成XML文件想到的类:XMLWriter类 ,DocumentHelper类,XStream类**

- XMLWriter类 ,DocumentHelper类
 		1.获取文件输出:
 					FileOutputStream  file = new FileOutputStream("文件路径");
 		
 		2.文档帮助器类
 					Element element = DocumentHelper.createElement(String node);	//生成根节点
 		
 		3。添加节点:
 					Element elementone = document.addElement( String node);
 		
 		4.实例化文档转换器类,并将文件转化为XML文件:
 					XMLWriter writer = new XMLWriter(file);
 		
 		5.将生成的XML写入XML文件
 		      		 wrter.writer(file);.
 		     
 		6.关闭流:
 		  			write.close();
 		  			
- XStream类:
1.实例化类:
 		 类名  对象 = new  类名();
2.实例化XStream类:
 			Xstream xstream = new Xstream();
3.规定根节点
 			 xstream.alias("根节点",类名.class);
4.把对象转换为XML字符串格式
 			类名 对象 = xstream.toXML(对象)

```

案例:

```
案例一:
Element e=DocumentHelper.createElement("person");
		e.addElement("name","幸运佳");
		e.addElement("age", "18");
		Element wx=e.addElement("hobby");
		String[] array = {"启发","自律","墨染","星辰"};
		for(int i = 0;i<array.length;i++) {
			wx.addElement("hobby"+i,(String)Array.get(array, i));
		}
		FileOutputStream f = new FileOutputStream("two.txt");
		XMLWriter w = new XMLWriter(f);
		w.write(e);
		w.close();
		
案例二:
public class Task3 {
	/**
	 * 生成XML字符串,并写入文件
	 * @param args
	 * @throws IOException
	 * @throws DocumentException
	 */
	public static void main(String[] args) throws IOException, DocumentException {
		
		Person p = new Person("流星","18","墨染");
       XStream x = new XStream();   //借助XStream类
       x.alias("person",Person.class);  //规定根节点
       System.out.println(x.toXML(p));
       
       FileOutputStream f = new FileOutputStream("there.txt",false); 
       // 必须false,不写时默认false,填true时会发生错误,原因就是 XML文件有且仅有一个根节点。
       PrintStream p2 = new PrintStream(f);   //转化为字符流
       String b =x.toXML(p);    //把对象转换为XML字符串
       p2.print(b); 
       p2.close();   //关闭流
       
       XMLWriter w = new XMLWriter(f);   //把文件转换为.xml类型的
       w.close();                        //关闭流
       
       FileInputStream fs = new FileInputStream("there.txt");  //文件输入流 
       InputStreamReader in = new InputStreamReader(fs);     //转换为字符流
       SAXReader s = new SAXReader();     //XML解析工具类
       Document d = s.read(in);            //获取文档    
       Element e = d.getRootElement();     //获取根节点
       
       System.out.println(e.getName());
       in.close();                          //关闭流
	}

}

class Person{
	private String name;
	private String age;
	private String hobby;
	public Person(String name, String age, String hobby) {
		this.name = name;
		this.age = age;
		this.hobby = hobby;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public String getHobby() {
		return hobby;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + ", hobby=" + hobby + "]";
	}
}
```

掌握JSON
解析JSON有两个类:GSon类 , JSON类
JSON语法:

  • {}包住的相当于一个对象
  • {}包住的内容由键值对(键 :值)的形式组成,并且同一级键不能有重复(唯一性),且键所对应的值也可是是一个{}(对象)。
  • 每个键值对有英文逗号隔开
  • 为了安全,在Java中我们要把键用引号引起来。
```
如:
{
	"age":"18",
	"name":"墨染",
	“hobby”:{
	   "age":"18",
	   "name":"星辰"
	}
}
```

GSon类

```
**方法**

 - toJson(对象名)  		 把对象转换为JSON格式字符串
 - fromJson(String jsonsring, 类名.class)			把JSON格式的字符串转换为对象

案例:
		public class Task4 {
			/**
			 * Gson
			 * */
			public static void main(String[] args) {
				Person p = new Person("墨染","19","星辰");  
				Gson g = new Gson();     //Gson类
				String s = g.toJson(p);    //把对象转换为json格式
				System.out.println(s);   
				
			  Person pl = g.fromJson(s, Person.class);   // json格式转换为Person类
			 System.out.println(pl.getName());        
			}
		}
```

JSON类

```
**方法**

 - toJSONString(对象名) 			 把对象转换为JSON格式的字符串
 - preseObject(String  jsonstring,类名.class)		把JSON格式的字符串转换为对象
 - preseArray(String jsonstring , 类名.class)     把JSON格式的字符串转换为List集合类型

案例:
			public class Task5 {
			    /**
			     * FastJson
			     * */
				public static void main(String[] args) {
					Person p = new  Person("墨染","18","龙的传人");
			        String s = JSON.toJSONString(p);  //类JSON 把对象转换为JSON字符串
			        System.out.println(s);
			       
			        Person k = JSON.parseObject(s,Person.class);   //静态类JSON 把为JSON字符串转换为对象Person
			        System.out.println(k.getAge()); 
				}
			}
```


 
   		  
        

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值