• JSON和XML的比较


编码的可读性,xml有明显的优势,毕竟人类的语言更贴近这样的说明结构。json读起来更像一个 数据块,读起来就比较费解了。不过,我们读起来费解的语言,恰恰是适合机器阅读,所以通过json的索引.province[0].name就能够读取“黑龙江”这个值。

编码的手写难度来说,xml还是舒服一些,好读当然就好写。不过写出来的 字符JSON就明显少很多。去掉空白制表以及换行的话,JSON就是密密麻麻的有用数据,而xml却包含很多重复的标记 字符。



  • JSON的理解


JSON建构有两种结构[1]


json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组2种结构,通过这两种结构可以表示各种复杂的结构


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


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



  • JSON的基本使用


1)//转换成为JSONObject对象  JSONObject jsonObj = new2)//json转换为字符串数据

public static void main(String[] args) throws JSONException { 

           

          //创建JSONObject对象 

          JSONObject json = new JSONObject(); 

           

          //向json中添加数据 

          json.put("username", "wanglihong"); 

          json.put("height", 12.5); 

          json.put("age", 24); 

           

          //创建JSONArray数组,并将json添加到数组 

          JSONArray array = new JSONArray(); 

          array.put(json); 

           

          //转换为字符串 

          String jsonStr = array.toString(); 

           

          System.out.println(jsonStr); 

      } 
3)对集合的转换
public static void main(String[] args)throws JSONException{
          //初始化ArrayList集合并添加数据
          List<String> list = new ArrayList<String>();
          list.add("username");
          list.add("age");
          list.add("sex");
          
          //初始化HashMap集合并添加数组
          Map map = new HashMap();
          map.put("bookname", "CSS3实战");
          map.put("price", 69.0);
          
          //初始化JSONArray对象,并添加数据
          JSONArray array = new JSONArray();
          array.put(list);
          array.put(map);
          
          //生成的JSON字符串为:[["username","age","sex"],{"price":69,"bookname":"CSS3实战"}]
      }
  • XML的理解
  • XML的作用区域
  • XML的基本使用

解析xml的API  :DOM(文档对象模型,核心是节点,可以上下导航,数据保存在内存中)  -------------------用得比较多

                      SAX(顺序读取文件,不能上下读取,事件驱动,用得比较少)

通过w3c的包DOM解析xml的代码:

import org.w3c.dom.Document
public class DomHandler{
    public  void read(String   fileName) throws  Exception{
   DocumentBuliderFactory   factory = DocumentBuilderFactory.newInstance();
  DocumentBuilder builder=factory.newDocumentBuilder();
Document document = builder.parse(this.getClass().getResourceAsStream("/"+fileName));//到这一步整个xml内容已经被保存在内存中了
//读取根节点
Element  root=document.getDocumentElement();
//获取指定节点的所有所有节点
NodeList  nodeList=root.getElementsByTagName("database");
for(int i=0;i<nodeList.getLength();i++){
Node  node=nodeList.item(i);
NameNodeMap   attributes  = node.getAttributes();
for(int j=0;j<attributes.getLength();j++){
Node  attribute= attributes.item(j);
}
}
}
}
通过DOM4j来解析xml:
public class  Dom4jHander{
  public  void  read(String  fileName)  throws  Exception{
SAXReader   saxReader=new  SAXReader();
Document document=saxReader.read(this.getClass().getResourceAsStream("/"+fileName);
Element  root= document.getRootElement();
List<Element>  childElements = root.elements("database");
for(Element  child:childElements){
//获取属性  不知道属性名称是的遍历方法
List<Attribute>  attributes=child.attributes();
for(Attribute  attribute:attributes){
//attribute.getName()  和attribute.getValue();
}
//获取已知属性的值
String    name=child.attributeValue("name");
}
}
//添加xml内容   
public  void  add()  throws  Exception{
//创建xml文档
Document docment=DocumentHelper.createDocment();
//添加根节点
Element root = document.addElement("dataSource");
//节点下添加子节点
Element   database=root.addElement("database");
//3.将document写出到文件
OutputFormat of= OutputFormat.createPrettyPrint();
of.setEncoding("GBK");
XMLWriter  xw=new  XMLWriter(new  FileOutputStream("db.xml"),of);
xw.write(document);

}

}