xml&json解析

XML&JSON解析

一、dom4j解析XML

1.dom4j的接口

接口名 描述
Node 所有的节点,是Document、Element、Text、Attribute、Branch等的父类型
Branch 包含子节点的节点
Element XML元素
Document XML文档
Attribute XML元素的属性,属性是放在尖括号内的
DocumentType XML文档中 DOCTYPE
Text XML的文本节点
2.生成Document对象

  • String类型XML

Document document = DocumentHelper.parseText(xmlStr);

  • File类型的XML

SAXReader saxReader = new SAXReader();

Document document = saxReader.read(file);

3.获取根节点并遍历节点

每一个Node都有getName()getNodeType()getNodeTypeName()三个函数

获取根节点:Element root = document.getRootElement()

获取节点的迭代器和遍历该节点的直接子节点:

// 获取节点的迭代器
Iterator iterator = root.elementIterator();
while(iterator.hasNext()) {
  Element element = (Element) iterator.next();
      // 获取节点之间的内容
      element.getText(); 
    // 获取节点的指定子节点的内容
      element.elementText("appid");
    // 获取当前节点所在的路径
    element.getPath();
  // 获取一个元素的属性列表
  element.attributes();
  // 获取元素的所有直接子元素构成的List
  element.elements();
  // 获取元素指定属性名color的属性,返回的是一个Attribute对象
  Attribute attribute  = element.attribute("color");
  // 获取属性的名和值
  attribute.getName();      
  attribute.getValue();
}
4.获取节点的指定子节点
Element root = document.getRootElement();
// 获取根节点的名字为appid的子节点
Element subNode = root.element("appid");

二、dom4j生成XML

1.建立Document

Document document = DocumentHelper.createDocument();

2.给document添加(根)节点

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

3.在根节点root上添加节点和节点内容

root.addElement(key).addText(value);root.addElement(key).addCDATA(value);

CDATA 指的是不应由 XML 解析器进行解析的文本数据,某些文本,比如 JavaScript 代码,包含大量 “<” 或 “&” 字符。为了避免错误,可以将脚本代码定义为 CDATA

4.将document转为String格式的XML 或 直接生成xml文件

String xmlStr = document.asXML();

生成xml文件

//输出xml的路径
File xmlFile = new File("D:/out.xml");
FileOutputStream fos = new FileOutputStream(xmlFile);
OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");//指定编码,防止写中文乱码
BufferedWriter bw = new BufferedWriter(osw);
//dom4j对xml输出格式化
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter out = new XMLWriter(bw, format);
out.write(document);
out.flush();

三、解析json串

1.创建json对象

JSONObject jsonObject = new JSONObject(jsonStr); // jsonStr格式是{}

JSONArray jsonArray = new JSONArray(jsonStr); // jsonStr格式是[{}, {}]

JSONArray subJsonArray = complexJsonArray.getJSONArray(0); // complexJsonArray 格式是[[{}, {}],{}]

2.获取json的数据并存到map
// 从JSONArray获取第0个JSONObject
JSONObject jsonObject = jsonArray.getJSONObject(0);
// 获取[{}, {}]的第一个元素的String格式
jsonArray.getString(0);
// 遍历JSONObject
Iterator<String> it = jsonObject.keys();
while (it.hasNext()) {
  // 获取键
  String key = it.next();
  // 通过key获取三种类型的值
  Object obj = jsonObject.get(key);
   int num = jsonObject.getInt(key);
  String value = jsonObject.getString(key);
  map.put(key, value);
}

四、创建json格式数据

1.把数据存储到map

Map<String, Object> iMap = new HashMap<String, Object>();

2.map转json格式
JSONObject jsonObject = new JSONObject(map);
// 把map转为json
jsonStr = jsonObject.toString()
3.生成指定JSON数据Demo

{“address”:”中国”,”count”:70,”user”:{“name”:”liu”,”tel”:”12306”,”age”:11}}

// 方式一:
Map<String, Object> map = new HashMap<String, Object>();
// 放入键-值
map.put("address", "中国");
map.put("count", 70);
// 此时的jsonObject数据是:{"address":"中国","count":70}
JSONObject jsonObject = new JSONObject(map);
// 创建新的JSONObject:{\"name\":\"liu\", \"age\":11, \"tel\":\"12306\"}
JSONObject newJsonObject = new JSONObject();
newJsonObject.put("name", "liu");
newJsonObject.put("age", 11);
newJsonObject.put("tel", "12306");
// 把newJsonObject,放入jsonObject,生成最终数据
jsonObject.put("user", newJsonObject);

// 方式二:
Map<String, Object> map = new HashMap<String, Object>();
// 存放用户数据的map
Map<String, Object> userMap = new HashMap<String, Object>();
// 在userMap中存放键值对,构造user JSONObject
userMap.put("name", "liu");
userMap.put("tel", "12306");
userMap.put("age", 11);
// 把address、count参数和userMap一起放到Map中,构造JSONObject
map.put("address", "中国");
map.put("count", 70);
map.put("user", userMap);
JSONObject jsonObject = new JSONObject(map);

注意:org.json没有内置方法将Java Bean转为JSONObject。net.sf.json有内置转换方法将Java Bean转为JSONObject。在引用net.sf.json的maven配置时,一定要补上<classifier>jdk15</classifier>

<!-- 完整的net.sf.json依赖配置 -->
<dependency>
    <groupId>net.sf.json-lib</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.4</version>
    <classifier>jdk15</classifier> 
</dependency>
4.生成JSONArray
// 方式一:将多个JSONObject依次put到JSONArray中
JSONArray jsonArray = new JSONArray();
jsonArray.put(jsonObject1);
jsonArray.put(jsonObject2);

// 方式二:用字符串直接new,jsonArrayStr的格式是:[{},{}]
JSONArray jsonArray = new JSONArray(jsonArrayStr);

猜你喜欢

转载自blog.csdn.net/main_958593250/article/details/79473575