xml及json解析

2020-12-25 CSDN技術社區

1.引子:DOM 

這篇文章寫得挺好

http://www.cnblogs.com/yexiaochai/archive/2013/05/28/3102674.html

document object model  文檔對象模型,用於訪問xml html的標準

在XML DOM每個元素 都會被解析為一個節點Node,而常用的節點類型又分為

元素節點  Element

屬性節點  Attr

文本節點  Text

文檔節點  Document



document對象的常用方法

getElementById()返回對擁有指定 id 的第一個對象的引用

getElementsByName()返回帶有指定名稱的對象集合

getElementsByTagName()返回帶有指定標籤名的對象集合


節點常用屬性

lnodeName

如果節點是元素節點,nodeName返回這個元素的名稱

如果是屬性節點,nodeName返回這個屬性的名稱

如果是文本節點,nodeName返回一個內容為#text 的字符串

lnodeType

Node.ELEMENT_NODE    ---1    -- 元素節點

Node.ATTRIBUTE_NODE  ---2    -- 屬性節點

Node.TEXT_NODE       ---3    -- 文本節點

lnodeValue

如果給定節點是一個屬性節點,返回值是這個屬性的值

如果給定節點是一個文本節點,返回值是這個文本節點內容

如果給定節點是一個元素節點,返回值是 null


<!doctype html><html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus®"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> <title>Dom概述</title> </head> <body> <h1>明天休息</h1> <script> //alert(document.getElementsByTagName("h1")[0].firstChild.nodeValue); //alert(document.getElementsByTagName("h1")[0].lastChild.nodeValue); //alert(document.getElementsByTagName("h1")[0].childNodes[0].nodeValue ); //alert(document.getElementsByTagName("h1")[0].innerHTML); </script> </body></html>


由於這裡只有一個子節點,first=last ,都能彈出明天休息的框框


<!doctype html><html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus®"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> <title>列印ul裡面的li子節點信息</title> <script> function getLi(){ var bjNode= document.getElementById("bj"); var childnum = bjNode.childNodes.length; //alert(childnum); for(var i=0;i<childnum ;i++) alert( bjNode.childNodes[i].nodeName+","+bjNode.childNodes[i].nodeType+","+ bjNode.childNodes[i].nodeValue ); //#text 3 北京 //h1 1 //#text 3 奧運 } </script> </head> <body> <ul> <li id="bj" value="beijing"> 北京 <h1>海澱</h1> 奧運 </li> <li id="sh" value="shanghai"> 上海 </li> <br/> <input type="button" value="li取值" οnclick="getLi()"/> </ul> </body></html>


這裡第一個節點下有3個子節點,第一個是文本節點,北京,第二個是一個元素節點,變大了的海澱,第三個是文本節點,奧運

所以依次輸出了

#text,3,北京

H1,1,null

#text,3,奧運


由上面這兩個例子就大概可以看出xml解析需要的基本知識,按節點獲取,至於增刪改查之類的這裡不多說了~


2.關於xml

如果想系統、深入的學習xml的知識,最好看看Javascript的相關知識,包括各種BOM、DOM、xml約束、解析什麼的


xml,可標記語言,用來傳輸數據,至於展示數據需要別的軟體解析

例如數據結構的樹形數據結構,如何才能交給PC處理?




xml的標籤

一個標籤中只能有一個主標籤;一個標籤下由若干子標籤,但是不能互相嵌套;主題內容中的空格也會被讀取,如果不處理,跑起來容易掛掉


<![CDATA[內容]]>  把  內容  當純文本顯示



 由於xml中大量自定義標籤,所以不能出錯,這就是為什麼會有約束:DTD 、Schema

 約束文檔定義了在XML中允許出現的元素名稱、屬性及元素出現的順序等等。

DTD約束文檔可以在XML文檔中直接定義,也可以作為單獨的文檔進行編寫(單獨的文檔必須以UTF-8編碼進行保存) 。




3.著重看下如何解析,做安卓開發主要還是用,SAX  DOM  PULL

首先簡單說下SAX和DOM解析的異同,而PULL解析是安卓特有,單獨說

首先解析方式上,主要是以下兩種,幾乎所有商用的xml 解析器都同時實現了這兩個接口

•DOM:Document Object Model,文檔對象模型。這種方式是W3C推薦的處理XML的一種方式。

•SAX:Simple API for XML。這種方式不是官方標準,屬於開源社區XML-DEV,幾乎所有的XML解析器都支持它


主流的解析包:

JAXP是SUN公司推出的解析標準實現。

Dom4J是開源組織推出的解析開發包。

•JDom:是開源組織推出的解析開發包。


(1) JAXP,

Java API for XML Processing,是JavaSE的一部分,它由以下幾個包及其子包組成:

•org.w3c.dom:提供DOM方式解析XML的標準接口

•org.xml.sax:提供SAX方式解析XML的標準接口

•javax.xml:提供了解析XML文檔的類

而javax.xml.parsers包中,定義了幾個工廠類。我們可以通過調用這些工廠類,得到對XML文檔進行解析的DOM和SAX解析器對象。

•DocumentBuilderFactory

•SAXParserFactory


進行DOM解析

調用 DocumentBuilderFactory.newInstance() 方法得到創建 DOM 解析器的工廠。


調用工廠對象的 newDocumentBuilder方法得到 DOM 解析器對象。


調用 DOM 解析器對象的 parse() 方法解析 XML 文檔,得到代表整個文檔的 Document 對象,進行可以利用DOM特性對整個XML文檔進行操作了。


進行SAX解析

由於在使用 DOM 解析 XML 文檔時,需要讀取整個 XML 文檔,在內存中構架代表整個 DOM 樹的Doucment對象,從而再對XML文檔進行操作。此種情況下,如果 XML 文檔特別大,就會消耗計算機的大量內存,並且容易導致內存溢出。

而SAX解析允許在讀取文檔的時候,即對文檔進行處理,而不必等到整個文檔裝載完才會文檔進行操作。


SAX採用事件處理的方式解析XML文件,利用 SAX 解析 XML 文檔,涉及兩個部分:解析器和事件處理器:

•解析器可以使用JAXP的API創建,創建出SAX解析器後,就可以指定解析器去解析某個XML文檔。

•解析器採用SAX方式在解析某個XML文檔時,它只要解析到XML文檔的一個組成部,都會去調用事件處理器的一個方法,解析器在調用事件處理器的方法時,會把當前解析到的xml文件內容作為方法的參數傳遞給事件處理器。

•事件處理器由程式設計師編寫,程式設計師通過事件處理器中方法的參數,就可以很輕鬆地得到sax解析器解析到的數據,從而可以決定如何對數據進行處理


使用SAXParserFactory創建SAX解析工廠

SAXParserFactory spf = SAXParserFactory.newInstance();

通過SAX解析工廠得到解析器對象

SAXParser sp = spf.newSAXParser();

通過解析器對象得到一個XML的讀取器

XMLReader xmlReader = sp.getXMLReader();

設置讀取器的事件處理器

xmlReader.setContentHandler(new BookParserHandler());

解析xml文件

xmlReader.parse("book.xml");


(2)DOM4J解析

看名字就知道這個是DOM模式解析,脫胎於更早期的JDOM

Dom4j是一個非常優秀的Java XML API,具有性能優異、功能強大和極易使用的特點。現在很多軟體採用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。

使用Dom4j開發,需下載dom4j相應的jar文件。


DOM4j中,獲得Document對象的方式有三種:


1.讀取XML文件,獲得document對象            

                   SAXReader reader = new SAXReader();
              Document   document = reader.read(new File("input.xml"));


2.解析XML形式的文本,得到document對象.

                   String text = "<members></members>";
              Document document = DocumentHelper.parseText(text);


3.主動創建document對象.

                  Document document = DocumentHelper.createDocument();
             //創建根節點

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


獲取節點對象

1.獲取文檔的根節點.

      Element root = document.getRootElement();


2.取得某個節點的子節點.

Element element=node.element(「書名");


3.取得節點的文字

      String text=node.getText();


4.取得某節點下所有名為「member」的子節點,並進行遍歷.
 List nodes = rootElm.elements("member");
 
  for (Iterator it = nodes.iterator(); it.hasNext();) {
     Element elm = (Element) it.next();
    // do something
 }


5.對某節點下的所有子節點進行遍歷.
    for(Iterator it=root.elementIterator();it.hasNext();){
       Element element = (Element) it.next();
       // do something
    }


6.在某節點下添加子節點.
Element ageElm = newMemberElm.addElement("age");


7.設置節點文字.
 element.setText("29");


8.刪除某節點.
//childElm是待刪除的節點,parentElm是其父節點

    parentElm.remove(childElm);

9.添加一個CDATA節點.
Element contentElm = infoElm.addElement("content");
contentElm.addCDATA(diary.getContent());


節點對象屬性

1.取得某節點下的某屬性
    Element root=document.getRootElement();    
    //屬性名name

         Attribute attribute=root.attribute("size");

2.取得屬性的文字
    String text=attribute.getText();

3.刪除某屬性
 Attribute attribute=root.attribute("size");
 root.remove(attribute);

4.遍歷某節點的所有屬性
   Element root=document.getRootElement();    
   for(Iterator it=root.attributeIterator();it.hasNext();){
         Attribute attribute = (Attribute) it.next();
         String text=attribute.getText();
         System.out.println(text);
    }

5.設置某節點的屬性和文字.
   newMemberElm.addAttribute("name", "sitinspring");

6.設置屬性的文字
   Attribute attribute=root.attribute("name");
   attribute.setText("sitinspring");


將文檔寫入XML

1.文檔中全為英文,不設置編碼,直接寫入的形式.
  XMLWriter writer = new XMLWriter(new  FileWriter("output.xml"));
  writer.write(document);
  writer.close();

2.文檔中含有中文,設置編碼格式寫入的形式.
OutputFormat format = OutputFormat.createPrettyPrint();
 指定XML編碼                  

     format.setEncoding("GBK");       
XMLWriter writer = new XMLWriter(new FileOutputStream ("output.xml"),format);
writer.write(document);
writer.close();


來對比下:


SAX這種基於事件的處理方式,一邊讀數據一邊解析,無需保存數據,在需要的時候直接停止亦可

而DOM這種基於樹的處理方式,需要先把數據完全讀入,可以對他的數據、結構進行修改,但是另一方面來說,對於比較大的文檔,他的內存消耗就比較大了


所以:

如果想對數據更改並輸出為xml,DOM更合適;對於大文件,XML更合適,另外如果對速度有要求,同樣XML是更好的選擇

當然,SAX 和 DOM 不是相互排斥的,記住這點很重要。您可以使用 DOM 來創建 SAX 事件流,也可以使用 SAX 來創建 DOM 樹。事實上,用於創建 DOM 樹的大多數解析器實際上都使用 SAX 來完成這個任務!


實例:

正好看到一篇好文,直接引用了。http://www.cnblogs.com/JerryWang1991/archive/2012/02/24/2365507.html


<?xml version="1.0" encoding="utf-8"?><channel><item id="0" url="http://www.baidu.com">百度</item><item id="1" url="http://www.qq.com">騰訊</item><item id="2" url="http://www.sina.com.cn">新浪</item><item id="3" url="http://www.taobao.com">淘寶</item></channel>



4.最後關於PULL解析

  在android系統中,很多資源文件中,很多都是xml格式,在android系統中解析這些xml的方式,是使用pul解析器進行解析的,它和sax解析一樣(個人感覺要比sax簡單點),也是採用事件驅動進行解析的,當pull解析器,開始解析之後,我們可以調用它的next()方法,來獲取下一個解析事件(就是開始文檔,結束文檔,開始標籤,結束標籤),當處於某個元素時可以調用XmlPullParser的getAttributte()方法來獲取屬性的值,也可調用它的nextText()獲取本節點的值。

跟SAX不同的是, Pull解析器產生的事件是一個數字,而非方法,因此可以使用一個switch對感興趣的事件進行處理。當元素開始解析時,調用parser.nextText()方法可以獲取下一個Text類型節點的值

pull本來是一個開源項目

Android SDK中已經集成了Pull解析器,無需添加任何jar文件

•         使用Pull解析器解析XML文件

–         1. Xml.newPullParser() 獲得解析器

–         2 parser.setInput(in, "UTF-8") 設置輸入流以及編碼

–         3. parser.next() 獲取下一個解析事件,得到一個事件代碼

–         4. XmlPullParser中定義了常量來標識各種解析事件

        START_DOCUMENT、

        END_DOCUMENT 、

        START_TAG 、

        END_TAG 、

        TEXT


<?xml version='1.0' encoding='utf-8' standalone='yes' ?><map><string name='nickname'>hellokitty</string><boolean name='autostart' value='false' /><float name='autoclose' value='1000.0' /></map>


bean

package com.example.bean;public class Book { private String bookname; private String author; private String priceString; @Override public String toString() { return "Book [bookname=" + bookname + ", author=" + author + ", priceString=" + priceString + "]"; } public String getBookname() { return bookname; } public void setBookname(String bookname) { this.bookname = bookname; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getPriceString() { return priceString; } public void setPriceString(String priceString) { this.priceString = priceString; } }


public class MainActivity extends Activity { public static String TAG = "pullparser"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void parsebyPull(View v) throws IOException{ //得到解析器XmlPullParser XmlPullParser pullparser = Xml.newPullParser(); List<Book> booklist= new ArrayList<Book>(); Book book = null; try { //設置讀取文件,要與xml裡的編碼格式一致 InputStream in = new FileInputStream("data/data/com.example.pullparser/files/books.xml"); pullparser.setInput(in, "UTF-8"); //類型 int evenType = pullparser.getEventType(); while(evenType!=XmlPullParser.END_DOCUMENT){ if (evenType==XmlPullParser.START_DOCUMENT) { Log.i(TAG, "START_DOCUMENT") ; } if (evenType==XmlPullParser.START_TAG){ Log.i(TAG, "START_TAG"+pullparser.getName()) ; if ("book".equals(pullparser.getName())) { book = new Book(); } if ("bookname".equals(pullparser.getName())) { book.setBookname(pullparser.nextText()); } if ("author".equals(pullparser.getName())) { book.setAuthor(pullparser.nextText()); } if ("price".equals(pullparser.getName())) { book.setPriceString(pullparser.nextText()); } } if (evenType==XmlPullParser.TEXT) { Log.i(TAG, "TEXT" +pullparser.getText()) ; } if (evenType==XmlPullParser.END_TAG) { Log.i(TAG, "END_TAG"+pullparser.getName()) ; if ("book".equals(pullparser.getName())) { booklist.add(book); book = null; } } evenType=pullparser.next(); } if (evenType==XmlPullParser.END_DOCUMENT) { Log.i(TAG, "END_DOCUMENT") ; } for ( Book book2 : booklist) { Log.i(TAG, book2.toString() ) ; } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }



5.JSON

對比下JSON與XML

<?xmlversion="1.0"encoding="utf-8"?><country>    <name>中國</name>    <province>        <name>黑龍江</name>        <cities>            <city>哈爾濱</city>            <city>大慶</city>        </cities>    </province>    <province>        <name>廣東</name>        <cities>            <city>廣州</city>            <city>深圳</city>            <city>珠海</city>        </cities>    </province>    <province>        <name>臺灣</name>        <cities>            <city>臺北</city>            <city>高雄</city>        </cities>    </province>    <province>        <name>新疆</name>        <cities>            <city>烏魯木齊</city>        </cities>    </province></country>

var pro ={ "name":"中國", "province":[{"name":"黑龍江","cities":{"city":["哈爾濱","大慶"]}}, {"name":"廣東","cities":{"city":["廣州","深圳","珠海"]}}, {"name":"臺灣","cities":{"city":["臺北","高雄"]}}, {"name":"新疆","cities":{"city":["烏魯木齊"]}} ] }


可讀性上,JSON更簡潔,xml更規範

擴展性上沒有區別

解析上,事先知道結構的時候,JSON顯然更有優勢

傳輸效率上,JSON無需閉合標籤,總數據量會少一些,傳輸壓力更小


查詢手機號,利用網絡上的服務提供數據,先看一下解析出來的數據格式

xml

http://api.k780.com:88/?app=phone.get&phone=13800138000&appkey=14114&sign=ede788f7bf8d0678e281f660654ef995&format=xml


JSON格式




public class MainActivity extends Activity { public static final String TAG = "phonenumberqurey"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } Handler hanlder = new Handler(){ @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); switch (msg.what) { case 1: //正確的連到伺服器就要獲取出來,而不是toast TextView tv_loaction = (TextView) findViewById(R.id.tv_location); tv_loaction.setText((String)msg.obj); break; case 2: Toast.makeText(MainActivity.this, (String)msg.obj, 0).show(); break; default: break; } } }; public void query(View v){ //先獲取電話號碼 EditText et_number = (EditText) findViewById(R.id.et_number); String number = et_number.getText().toString(); final String path ="http://api.k780.com:88/?app=phone.get&phone="+number+"&appkey=14114&sign=ede788f7bf8d0678e281f660654ef995&format=xml"; //發請求的線程 Thread thread = new Thread(){ public void run() { try { URL url = new URL(path); HttpURLConnection conn= (HttpURLConnection) url.openConnection(); // conn.setReadTimeout(5000); conn.setConnectTimeout(5000); conn.setRequestMethod("GET"); // conn.connect(); // String city =null; String operator = null; if(conn.getResponseCode()==200){ //登陸成功 //登陸失敗? InputStream is= conn.getInputStream(); //String text = WebUtils.gettextFromInputStream(is, null); XmlPullParser pullparser = Xml.newPullParser(); pullparser.setInput(is, "UTF-8"); //得到讀取到的某部分的類型 int evenType = pullparser.getEventType(); while(evenType!=XmlPullParser.END_DOCUMENT){ if (evenType==XmlPullParser.START_TAG) { Log.i(TAG, "START_TAG"+pullparser.getName()) ; if ("operators".equals(pullparser.getName())) { operator=pullparser.nextText(); } if ("style_citynm".equals(pullparser.getName())) { city=pullparser.nextText(); } } evenType=pullparser.next(); } Log.i(TAG,operator+":"+city); Message msg = hanlder.obtainMessage(); msg.what=1; if(city==null||operator==null) msg.obj="沒有查詢到結果"; else msg.obj= city+":"+operator; hanlder.sendMessage(msg); } else { Message msg = hanlder.obtainMessage(); msg.what=2; msg.obj="沒有連結到伺服器"; hanlder.sendMessage(msg); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }; }; thread.start(); } public void querybyjson(View v){ //先獲取電話號碼 EditText et_number = (EditText) findViewById(R.id.et_number); String number = et_number.getText().toString(); final String path ="http://api.k780.com:88/?app=phone.get&phone="+number+"&appkey=14114&sign=ede788f7bf8d0678e281f660654ef995&format=json"; //發請求的線程 Thread thread = new Thread(){ public void run() { try { URL url = new URL(path); HttpURLConnection conn= (HttpURLConnection) url.openConnection(); conn.setReadTimeout(5000); conn.setConnectTimeout(5000); conn.setRequestMethod("GET"); conn.connect(); String city =null; String operator = null; if(conn.getResponseCode()==200){ InputStream is= conn.getInputStream(); //json需要提取出文本 String text = WebUtils.gettextFromInputStream(is, null); JSONObject jsonObject = new JSONObject(text); JSONObject result = jsonObject.getJSONObject("result"); city= result.getString("style_citynm"); operator = result.getString("operators"); Log.i(TAG,operator+":"+city); Message msg = hanlder.obtainMessage(); msg.what=1; if(city==null||operator==null) msg.obj="沒有查詢到結果"; else msg.obj= city+":"+operator; hanlder.sendMessage(msg); } else { Message msg = hanlder.obtainMessage(); msg.what=2; msg.obj="沒有連結到伺服器"; hanlder.sendMessage(msg); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }; }; thread.start(); } class Myhandler extends AsyncHttpResponseHandler { @Override public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { // TODO Auto-generated method stub String city =null; String operator = null; //String text = WebUtils.gettextFromInputStream(is, null); XmlPullParser pullparser = Xml.newPullParser(); //onSuccess的最後一個參數傳遞的是數組,這裡需要一個把數組轉成流的方法~ ByteArrayInputStream bais= new ByteArrayInputStream(responseBody); try { pullparser.setInput(bais, "utf-8"); //得到讀取到的某部分的類型 int evenType = pullparser.getEventType(); while(evenType!=XmlPullParser.END_DOCUMENT){ if (evenType==XmlPullParser.START_TAG) { Log.i(TAG, "START_TAG"+pullparser.getName()) ; if ("operators".equals(pullparser.getName())) { operator=pullparser.nextText(); } if ("style_citynm".equals(pullparser.getName())) { city=pullparser.nextText(); } } evenType=pullparser.next(); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } //json JSONObject jsonObject =null; try { jsonObject = new JSONObject(new String(responseBody)); JSONObject result = jsonObject.getJSONObject("result"); city= result.getString("style_citynm"); operator = result.getString("operators"); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } TextView tv_loaction = (TextView) findViewById(R.id.tv_location); tv_loaction.setText(city+":"+operator); } @Override public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) { // TODO Auto-generated method stub } } public void querybyxml_async(View v){ EditText et_number = (EditText) findViewById(R.id.et_number); String number = et_number.getText().toString(); final String path ="http://api.k780.com:88/?app=phone.get&phone="+number+"&appkey=14114&sign=ede788f7bf8d0678e281f660654ef995&format=xml"; AsyncHttpClient asyncHttpClient = new AsyncHttpClient(); asyncHttpClient.post(path, new Myhandler()); } public void querybyjson_aysnc(View v){ EditText et_number = (EditText) findViewById(R.id.et_number); String number = et_number.getText().toString(); final String path ="http://api.k780.com:88/?app=phone.get&phone="+number+"&appkey=14114&sign=ede788f7bf8d0678e281f660654ef995&format=json"; AsyncHttpClient asyncHttpClient = new AsyncHttpClient(); asyncHttpClient.post(path, new Myhandler()); }}


最後再對比下


關於輕量級和重量級
輕量級和重量級是相對來說的,那麼XML相對於JSON的重量級體現在哪呢?應該體現在解析上,XML目前設計了兩種解析方式:DOM和 SAX
<1>.DOM
DOM是把一個數據交換格式XML看成一個DOM對象,需要把XML文件整個讀入內存,這一點上JSON和XML的原理是一樣的,但是XML要考慮父節點和子節點,這一點上JSON的解析難度要小很多,因為JSON構建於兩種結構:key/value,鍵值對的集合;值的有序集合,可理解為數組;
<2>.SAX
SAX不需要整個讀入文檔就可以對解析出的內容進行處理,是一種逐步解析的方法。程序也可以隨時終止解析。這樣,一個大的文檔就可以逐步的、一點一點的展現出來,所以SAX適合於大規模的解析。這一點,JSON目前是做不到得。
所以,JSON和XML的輕/重量級的區別在於
JSON只提供整體解析方案,而這種方法只在解析較少的數據時才能起到良好的效果;
XML提供了對大規模數據的逐步解析方案,這種方案很適合於對大量數據的處理。


相關焦點

  • 使用JSONObject生成和解析json
    構建json在eclipse中使用JSONObject需要引用org.json包,推薦通過maven引用,如果不會使用maven,搭建maven項目可參考這篇文章《使用Eclipse構建Maven項目 (step-by-step)》,引用json則參考這篇文章《maven引入json各種版本》。
  • 嘗試一下sql server2016裡面的json功能
    另外一個東西,sql server 2016能支持json 的解析和應用啦,雖然我不知道它的性能如何,先來一發測試一下功能 測試一下基本的,從查詢結果裡面構造一個json 的格式create table t1(ID int identity,name nvarchar(50),Chinese int ,Math int)insert into t1 values
  • Web傳輸和存儲數據結構化,xml可輕鬆實現,用Python如何解析它?
    對於開發者來講xml文件優點很多xml文檔結構使得開發人員能夠更加得心應手地來控制數據的存儲和傳輸。今天,我們用一個案例來詳細了解一下,使用Python如何解析一個xml文檔。但這段描述可讀性和結構化程度並不高,我們可以使用XML標記語言標記成這樣(當然你還也可以使用json或者類似YAML這樣的結構進行標記也是可以滴)
  • python解析json方法
    易於人閱讀和編寫,同時也易於機器解析和生成。它的格式一般是這樣的:對象是一個無序的「『名稱/值'對」集合。一個對象以「{」(左括號)開始,「}」(右括號)結束。每個「名稱」後跟一個「:」(冒號);「『名稱/值' 對」之間使用「,」(逗號)分隔。
  • Mybatis中mapper的xml解析詳解
    基礎介紹回顧下之前是在分析configuration的初始化過程,已經進行到了最後一步mapperElement(root.evalNode("mappers")),這個方法裡有兩種解析mapper的方法,一種是解析類,一種是解析xml文件,上一篇文章在講解析類中的註解,今天說到的就是解析xml
  • 解析XML文件
    Python自帶XML模塊,方便開發者解析XML數據。XML模塊中包含了廣泛使用的API接口---SAX和DOM等。另外,lxml解析庫同樣支持HTML和XML的解析,而且支持XPath解析方式。總的來說,Python解析XML的常用方法有以下幾種:3、ET解析,xml.etree.ElementTree模塊。
  • 程式設計師:JSON、JSONObject 與 JSONArray 簡單講解
    fastjson簡介fastjson 是阿里巴巴的開源JSON解析庫,它可以解析 JSON 格式的字符串,支持將 Java Bean 序列化為 JSON 字符串,也可以從 JSON 字符串反序列化到 JavaBean。
  • Java解析json的一些操作
    >json字符串—>json對象JSON.parseObject() 從字符串解析 JSON 對象JSON.parseArray() 從字符串解析 JSON 數組靜態方法parseObject() 能夠將json格式的字符串轉換成一個JSONObject對象,然後再進行json的「增刪改查」的操作增.put("key","value"
  • php解析json格式的文本
    昨天,在我校的高級培訓群裡,有同學諮詢了如何用php解析json格式的文本問題,老師發現這個問題比較典型,在此將相關的知識點總結分享給同學們,希望對其他同學掌握該知識點也能起到一些幫助。同學jsoly提問說,有這樣的一個數組$arr(如下圖所示)想轉換為php的數組,該如何處理。一眼望去就是個json格式的字符串,顯然php裡面不能這樣定義,這樣的定義會報語法錯誤,就像這樣:
  • Springmvc框架對json的支持 Java程式設計師必看
    這是我的jsp頁面,我們使用Jquery的方式對後端發送json字符串,這就需要引入jquery這個框架, 當我啟動項目是js死活都解析不出來jquery的路徑,經過好長一段時間的忙活終於找出來了問題所在,原來罪魁禍首就是springmvc中的DispatcherServlet,它把我的jquery路徑當做請求處理了,於是我們必須不讓他處理這個請求,讓它對靜態資源放行需要進行如下配置
  • 全網最全的SQL解析Json總結
    傻瓜化函數解析,包括get_json_object、json_tuple.即可以接多個需要解析的json欄位,一次性解析出來。適用於需要一次性解析一個json中的多個欄位。其次json_tuple不用使用$標識要提取的欄位.•語法: json_tuple(json, args...)
  • [快學Python3]XML解析處理 - Element Tree
    概述本文就是python xml解析進行講解,在python中解析xml有很多種方法,本文通過實例來講解如何使用ElementTree來解析xml。對於其他的xml解析方法,請自行去查找資料。ElementTreeElementTree是Python提供解析xml的標準庫,ElementTree中每個節點(即Element)具有如下屬性:註:Element類型是一種靈活的容器對象,用於在內存中存儲結構化數據。
  • 使用Python讀取,寫入和解析JSON
    JSON是用於數據交換的輕量級數據格式,可以很容易地被人類讀取和寫入,也可以由機器輕鬆解析和生成。它是一種完全獨立於語言的文本格式。
  • python如何編碼解碼解析json對象
    前言json是一種以鍵值對形式存在的輕量級的數據結構,和python中的字典類型具有相同的表現結構。使用 JSON 函數需要導入 json 庫:import json。在Java中我們知道json有jsonObject和jsonArray,且可以通過String、map等相互轉換,那麼在python中,json對象是如何來讀取解析的呢?python解析json對象1.json.dumpsjson.dumps用於將 Python 對象編碼成 JSON 字符串。
  • SAX PULL DOCUMENT解析XML總結
    2、調用,用SAXParser或者XMLReader來解析SAXParser解析SAXHandlerParseService saxForHandler = newSAXHandlerParseService();SAXParserFactory spf = SAXParserFactory.newInstance();
  • 靈活調用xsl來解析xml文檔(js異步)
    hello.xml(注意:我的xml文檔中並沒有指定對應的xsl解析文件名)以下是引用片段:<?xml version='1.0'?文檔只有純粹的數據,如果需要顯示到html頁面中的話,一般需要使用定製的xsl文檔來解析,或者手工通過js來讀取xml中的值顯示到html中的dom樹中,當使用xsl文檔來解析時,相應的xml文檔中必須指定對應的xsl文檔才能正常顯示,但當有些程序動態輸出xml文檔時,並沒有指定相應的xsl文檔,這時就必須通過其它途徑來加載相應的xsl文檔來解析,當然,在伺服器端輸出xml文檔時,通過一些xml api
  • 數據類型和Json格式
    我馬上想到了json。21世紀初,Douglas Crockford尋找一種簡便的數據交換格式,能夠在伺服器之間交換數據。當時通用的數據交換語言是XML,但是Douglas Crockford覺得XML的生成和解析都太麻煩,所以他提出了一種簡化格式,也就是Json。
  • php中的Json是什麼?什麼時候使用Json
    Json是一種在網際網路編程中常用的數據結構,是一種輕量級的數據交換格式,主要用於替代網際網路中使用的xml數據。和xml相比,它更小巧但描述能力卻不差,由於它的小巧所以網絡傳輸數據將減少更多流量,從而加快數據傳輸速度。
  • jq:命令行下解析JSON的神器
    同時也易於機器解析和生成。各種語言都有大量的JSON處理庫,比如fastjson,Json-lib,jsoniter,jackson,gson等,我們可以很方便就可以寫一個腳本獲取接口的Json信息,並通過這些類庫進行處理。雖然如此,有些同學可能還是嫌寫腳本太麻煩,有沒有一種很簡單就能上手就用,用完就扔的JSON工具呢?答案是肯定的。
  • 辦公室文員到開發人員的過渡,用Python將Excel轉化為xml文檔格式
    上一篇內容我們通過一個例子詳解了Python解析xml文檔的方法(參見Web傳輸和存儲數據結構化,xml可輕鬆實現,用Python如何解析它?)。etree模塊處理機制我們在上篇解析中提到了xml文件的解析,解析之前肯定要先讀取了,但是上篇內容並沒有很好的做出說明。今天我們來詳細梳理下:接觸過Linux的小夥伴肯定知道,Linux文件系統結構就像一個倒立的樹形結構,這種結構的優點是層次清晰,便於檢索和操作文件。