JFW日常總結 -- dom4j & fastjson篇

dom4j: 字符串與文檔互轉; 創建文檔、節點、屬性;獲取節點、屬性值;

1. 創建文檔Document:
 Document document = DocumentHelper.createDocument();

2.創建根節點:   
Element root=document.addElement("root");

3.創建子節點(並設置文本內容):  
Element book=root.addElement("book")[.setText("100")];

4.添加節點屬性:  book.addAttribute("type","science"); 

5.文檔轉字符串:
String str = document.asXML();

6.字符串轉文檔:
Document document=DocumentHelper.parseText(str);

7.獲取節點:
Document document = DocumentHelper.parseText(str);->
Element root=document.getRootElement(); -- 根節點
Element book=root.element("book"); -- 子節點;

8.獲取節點屬性值:
String type=book.attributeValue("type");

9.xpath: /DOCUMENT/BODY

List<Element> children = document.selectNodes(xpath);

 

fastjson: 字符串與JSON互轉;JSON、JSONObject、JSONArray;

1.簡單對象型: String OBJ_STR = "{\"name\":\"lily\",\"age\":12}";

2.簡單對象型: String OBJ_STR = "{\"name\":\"lily\",\"age\":12}";

3. 數組類型: String ARRAY_STR = "[{\"name\":\"lily\",\"age\":12},  {\"name\":\"lucy\",\"age\":15}]";

4.複雜格式: String JSON_STR ="{\"course\":{\"name\":\"english\",\"code\":1270},
            \"stu\":[{\"name\":\"lily\",\"age\":12},{\"name\":\"lucy\",\"age\":15}]}";
        JSONObject jsonObject = JSON.parseObject(OBJ_STR);
        JSONArray jsonArray = JSON.parseArray(JARRAY_STR);

5. JSON轉字符串: String str = jsonArray.toJSONString();

6.jsonpath: $.message.body

Object result = JSONPath.eval(jsonObject, jsonpath);

 

XML與JSON互轉

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import java.util.Iterator;
import java.util.List;

public class Json2Xml {

    /**
     * com.alibaba.fastjson.JSONObject 轉 org.dom4j.document
     */
    public static Document jsonToXml(JSONObject jsonObject) {
        Document document = DocumentHelper.createDocument();
        Element root;
        Iterator<String> iter = jsonObject.keySet().iterator();
        if (iter.hasNext()) {
            String key = iter.next();
            root = document.addElement(key);
            jsonToElement(jsonObject, root);
        }
        return document;
    }

    /**
     * @param jsonObject
     * @param element
     * @return
     */
    public static Element jsonToElement(JSONObject jsonObject, Element element) {

        Object jsonNode = jsonObject.get(element.getName());
        if (jsonNode instanceof JSONArray) {
            for (JSONObject childrenJson : (List<JSONObject>) jsonNode) {
                addElement(childrenJson, element);
            }
        } else if (jsonNode instanceof JSONObject) {
            JSONObject childrenJson = (JSONObject) jsonNode;
            addElement(childrenJson, element);
        } else {
            // 遞歸出口
            element.setText(jsonNode.toString());
        }
        return element;
    }

    /**
     * 1.獲取childrenJson的key值, 作爲children的節點名
     * 2.轉換childrenJson的value,將children添加到element(遞歸)
     *
     * @param childrenJson
     * @param element
     * @return
     */
    private static Element addElement(JSONObject childrenJson, Element element) {
        Iterator<String> iter = childrenJson.keySet().iterator();
        if (iter.hasNext()) {
            String key = iter.next();
            Element children = element.addElement(key);
            jsonToElement(childrenJson, children);
        }
        return element;
    }

    /**
     * org.dom4j.document 轉 com.alibaba.fastjson.JSONObject
     *
     * @param document
     * @return
     */
    public JSONObject xmlToJson(Document document) {
        Element root = document.getRootElement(); // 根節點
        List<Element> elements = root.elements();
        JSONObject jsonObject = new JSONObject();
        return (JSONObject) jsonObject.put(root.getName(), this.elementToJson(elements));
    }

    /**
     * 1.參數element集合,遍歷得到element
     * 2.獲取element子節點集合,
     * 3.子集合>0遞歸,否則jsonobject.put(node.name, node.text)
     *
     * @param elements
     * @return
     */
    public static JSONObject elementToJson(List<Element> elements) {
        JSONObject jsonObject = new JSONObject();
        for (Element element : elements) {
            List<Element> children = element.elements();
            if (children.size() > 0) {
                jsonObject.put(element.getName(), elementToJson(children));
            } else {
                jsonObject.put(element.getName(), element.getText());
            }
        }
        return jsonObject;
    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章