操作およびJava、XML、JSON

操作およびJava、XML、JSON

1. XML

1.1 XML入門

XML、拡張可能マークアップ言語(拡張マークアップ言語)は、データの表現形式であり、それはデータの伝送及び記憶のために非常にコピーされたデータ構造を無視することができます

特徴:

  • プレーンテキスト、UTF-8エンコーディングのデフォルト
  • データの構造を示すために、ネスト可能
  • 形式のbook.xml次のような文書の一般的な形式、

1.2判決

Javaの構文解析XML:

  • ドキュメント:XML文書の代表
  • 要素:要素
  • 属性:属性
  • テキスト:テキスト
  • コメント:コメント

JavaのドムコアAPI:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse("/Users/lingjing/IdeaProjects/hadooptest/pom.xml");
Element root = doc.getDocumentElement();

JavaのDOMのAPI:

  • DOMにXMLをパース
  • 識別は、メモリ内のXMLデータ構造を完了することができます
  • ゆっくりと、大きなメモリフットプリントの解析

ドム例

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Node;

public class DOMTest {

    static final String XML_URL = "http://rss.sina.com.cn/tech/internet/home28.xml";

    public static void main(String[] args) throws Exception {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.parse("/Users/lingjing/IdeaProjects/hadooptest/pom.xml");
        printNode(doc, 0);
    }

    static void printNode(Node n, int indent) {
        String tab = "";
        for (int i = 0; i < indent; i++) {
//            System.out.print(' ');
            tab += "\t";
        }
        System.out.print(tab);
        switch (n.getNodeType()) {
            case Node.DOCUMENT_NODE:
                System.out.println("Document: " + n.getNodeName());
                break;
            case Node.ELEMENT_NODE:
                System.out.println("Element: " + n.getNodeName());
                break;
            case Node.TEXT_NODE:
                System.out.println("Text: " + n.getNodeName() + " = " + n.getNodeValue());
                break;
            case Node.ATTRIBUTE_NODE:
                System.out.println("Attr: " + n.getNodeName() + " = " + n.getNodeValue());
                break;
            case Node.CDATA_SECTION_NODE:
                System.out.println("CDATA: " + n.getNodeName() + " = " + n.getNodeValue());
                break;
            case Node.COMMENT_NODE:
                System.out.println("Comment: " + n.getNodeName() + " = " + n.getNodeValue());
                break;
            default:
                System.out.println("NodeType: " + n.getNodeType() + ", NodeName: " + n.getNodeName());
        }
        for (Node child = n.getFirstChild(); child != null; child = child.getNextSibling()) {
            printNode(child, indent + 1);
        }
    }
}

1.3 SAX

SAX:XML、イベントベースのAPIのためのシンプルなAPI

SAX解析は、一連のイベントをトリガします。

  • 文書を開始
  • startElement
  • キャラクター:テキスト
  • endElement
  • EndDocumentの

XMLを解析するSAX:

  • XML APIを解析するのストリーミング型
  • イベントによってトリガーされ、速いです
  • 発信者は、コールバックメソッドを介してデータを取得します

SAX例:

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

public class SAXSample {

    static final String XML_URL = "http://rss.sina.com.cn/tech/internet/home28.xml";

    public static void main(String[] args) throws Exception {
        SAXParserFactory spf = SAXParserFactory.newInstance();
        SAXParser saxParser = spf.newSAXParser();
        saxParser.parse("/Users/lingjing/IdeaProjects/hadooptest/pom.xml", new MyHandler());
    }
}



import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;

public class MyHandler extends DefaultHandler {

    void print(Object... objs) {
        for (Object obj : objs) {
            System.out.print(obj);
            System.out.print(" ");
        }
        System.out.println();
    }

    @Override
    public void startDocument() throws SAXException {
        print("start document");
    }

    @Override
    public void endDocument() throws SAXException {
        print("end document");
    }

    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        print("start element:", localName, qName);
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        print("end element:", localName, qName);
    }

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        print("characters:", new String(ch, start, length));
    }

    @Override
    public void error(SAXParseException e) throws SAXException {
        print("error:", e);
    }

}

1.4ジャクソン

ジャクソンを使用します。

  • XMLを読み書きするためのオープンソースツール
  • できるXMLとJavaBeanの間の変換
  • シンプルなAPIインタフェース
  • カスタマイズ可能なシリアル

Mavenは住所を頼り:

<dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
            <version>2.9.0</version>
</dependency>
<dependency>
            <groupId>org.codehaus.woodstox</groupId>
            <artifactId>woodstox-core-asl</artifactId>
            <version>4.4.1</version>
</dependency>

XMLを読む:XMLは、Javaオブジェクトになります

XmlMapper mapper = new XmlMapper();
Book book = mapper.readValue(xml, Book.class);

JavaオブジェクトをXMLファイルになり、文字列を返します:XMLを書きます

XmlMapper mapper = new XmlMapper();
String xml = mapper.writeValueAsString(book);

2. fastjson

設定のmaven

<dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.46</version>
</dependency>

コードをテストします。

import lombok.Data;

@Data
public class User {
    private String name;
    private int age;
}


public class TestUser {

    public static void main(String[] args) {
        User user = new User();
        user.setAge(20);
        user.setName("ajing");
        // 把User对象变成json字符串
        String jstr = JSON.toJSONString(user);
        System.out.println(jstr);
        // 把字符串变成User对象
        User u1 = JSON.parseObject(jstr, User.class);
        System.out.println(u1 instanceof  User);
        System.out.println(u1.getAge());
        System.out.println(u1.getName());
    }
}

おすすめ

転載: www.cnblogs.com/lingshang/p/10984627.html