




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、JSON介紹一、JSON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式。易于人閱讀和編寫。同時(shí),也易于機(jī)器解析和生成。二、JSON數(shù)據(jù)格式解析:和XML一樣,JSON也是基于存文本的數(shù)據(jù)格式。您可以用JSON傳輸一個(gè)簡(jiǎn)單的String、Number、Boolean,也可以傳輸一個(gè)數(shù)組或者一個(gè)復(fù)雜的Object對(duì)象。例如:1、用JSON表示一個(gè)簡(jiǎn)單String “abc”,其格式為:”abc”。除了字符“,/ 和一些控制符(b,n,t等)需要編碼外,其他Unicode字符可以直接輸出。2、用JSON表示一個(gè)數(shù)組對(duì)象,使用“ “包含所有元素,每個(gè)元素用逗號(hào)分隔,
2、元素可以使任意的value,例如,一下數(shù)組包含了一個(gè)String、Number、Boolean、和一個(gè)null:“abc”,123,false,null。3、Object對(duì)象在JSON中用“ “包含一系列無(wú)序的Key-Value鍵值對(duì)表示,實(shí)際上此處的Object相當(dāng)于Java中的Map。注意Key只能用String表示。例如:一個(gè)Address對(duì)象包含如下Key-Value:“city”:”beijing”,”street”:”chaoyang”,”postcode”:100025。三、JAVASCRIPT處理JSON數(shù)據(jù)Function demo()var v=“name”:”SMITH”
3、,”address”: “city”:”beijing”,”street”:”chaoyang”,”postcode”:100025;document.write();document.write(v.address.city);四:JSON和XML的比較XML和JSON都是用結(jié)構(gòu)化方法來(lái)標(biāo)記數(shù)據(jù),下面來(lái)做一個(gè)簡(jiǎn)單的比較。<?xml version=”1.0” encoding=”utf-8”?><country><name>中國(guó)</name><province><name>黑龍江</name>&l
4、t;citys><city>哈爾濱</city><city>大慶</city></citys></province></country>用JSON表示如下:name:”中國(guó)”,province:Name:”黑龍江”,citys:“哈爾濱”,”大慶”XML比JSON更有可讀性。不過(guò),我們讀起來(lái)費(fèi)解的語(yǔ)言,恰恰是適合機(jī)器閱讀的。編寫的手寫難度來(lái)說(shuō),XML還是舒服一些,好讀當(dāng)然就好寫。不過(guò)寫出來(lái)的字符JSON就明顯少很多。去掉空白制表以及換行的話,JSON就是有用數(shù)據(jù),而XML卻包含很多重復(fù)的標(biāo)記字符。五、下面
5、列舉兩個(gè)對(duì)象:JSONArray和JSONObject在寫有關(guān)于JSON的程序時(shí)首先要加入六個(gè)JAR包:commons-beanutils-1.7.0.jar、commons-collections.jar、commons-lang-2.2.jar、ezmorph-1.0.4.jar、json-lib-2.1-jdk15.jar、xom-1.1d2.jar(1)JSONArray 例子: List list = new ArrayList(); list.add("a"); list.add("b");
6、160; JSONArray jso = JSONArray.fromObject(list); System.out.println(list); 輸出的結(jié)果是:“a”,”b” 。(2)JSONObject 例子: Map map = new HashMap(); map.put( "int", new Integer(1) ); map.put( "arr", new String"a","b" );
7、0; map.put( "func", "function(i) return this.arr; " ); JSONObject json = JSONObject.fromObject( map ); System.out.println( json ); 輸出的結(jié)果是:"arr":"a","b","int":1,"func":function(i) re
8、turn this.arr; (3)JSONObject to XML 例子: JSONObject json = JSONObject.fromObject(""name":"json","bool":true,"int":1"); XMLSerializer xmlSerializer = new XMLSerializer(); String xml = xmlSerializer.write(json); &
9、#160; System.out.println(xml); XML to JSONObject 例子: String xmls = "<?xml version='1.0' encoding='UTF-8'?><o><int type='number'>1</int>" + "<name type='string'>json</name></o>"
10、; XMLSerializer xmlSerializer = new XMLSerializer(); JSON json = xmlSerializer.read(xmls); System.out.println( json.toString(2) ); 六、下面列舉AJAX和JSON的例子 1、環(huán)境struts、hibernate、JSON、AJAX 2、首先,加載struts和hibernate框架,然后再把JSON的JAR包放到lib下。創(chuàng)建一個(gè)Action: Action的內(nèi)容如下: Prin
11、tWriter out = response.getWriter(); JSONObject obj = new JSONObject(); JSONArray js = new JSONArray(); /這里的數(shù)據(jù)封裝是從數(shù)據(jù)庫(kù)查詢來(lái)的 MesDao md = new MesDao(); List list = md.findMess(); for(int i=0;i<list.size();i+) JSONObject objtemp = new JSONObject();
12、; TMessage tm = (TMessage) list.get(i); objtemp.put("id", tm.getId(); objtemp.put("name", tm.getName(); js.add(objtemp); obj.put("js",js); out.print(obj.toString(); 然后,創(chuàng)建一個(gè)JSP頁(yè)面: 其內(nèi)容如下: <script type="text/ja
13、vascript" src="prototype1.4.js"></script> <script type="text/javascript" src="toolpro.js"></script> <script type="text/javascript"> function demo() new Ajax.Updater("content","test.do"
14、); </script><a href='javascript:getcomplex()'>獲取數(shù)據(jù)</a><div id="content"> 正在獲取內(nèi)容.</div>然后創(chuàng)建toolpro.jstoolpro.js的內(nèi)容如下:function getcomplex()var url = 'test.do' var ajax = new Ajax.Request(url, method:'post',
15、Complete:showcomplex); function showcomplex(dataResponse) var data = eval('(' + dataResponse.responseText + ')');var str=''for(var i=0;i<data.js.length;i+)str+='<ul>'str+='<li>'+data.js.id+'</li>'str+='<li>
16、39;++'</li>'str+='</ul>'document.getElementById("content").innerHTML=str;import net.sf.json.JSONArray; import net.sf.json.JSONObject; import java.util.*; /* * * author derek
17、0; */ public class JavaTest public static void main(String args) JSONObject obj=new JSONObject(); obj.put(
18、"derek","23"); obj.put("dad", "49"); obj.put("mom", "45");
19、 System.out.println("通過(guò)構(gòu)造器的方式創(chuàng)建的JSONObject對(duì)象:"+obj); Map<String,String> map=new LinkedHashMap<>();
20、160; map.put("derek","23"); map.put("dad", "49"); map.put("mom", "45");
21、 System.out.println("通過(guò)fromObject方法將map對(duì)象轉(zhuǎn)換為JSONObject對(duì)象:"+JSONObject.fromObject(map); JSONArray arr=new JSONArray(); &
22、#160; arr.add(0,"derek"); arr.add(1,"dad"); arr.add(2,"mom");
23、160; System.out.println("通過(guò)構(gòu)造器的方式創(chuàng)建的JSONArray:"+arr); ArrayList<String> list=new ArrayList<>();
24、; list.add("derek"); list.add("dad"); list.add("mom"); System.out.println("通過(guò)
25、fromObject方法將Arraylist對(duì)象轉(zhuǎn)換為JSONArray對(duì)象:"+JSONArray.fromObject(list); System.out.println("將HashMap對(duì)象通過(guò)fromObject方法轉(zhuǎn)換為JSONArray對(duì)象"+JSONArray.fromObject(map)
26、; String str=""derek":23,"dad":49,"mom":45" System.out.println("解
27、析之后的JSON對(duì)象:"+JSONObject.fromObject(str); /遍歷輸出 Iterator<String> it=obj.keys();
28、60; while(it.hasNext() String key=it.next(); System.out.println(key+":"+obj.get(key);
29、0; 運(yùn)行結(jié)果如下:通過(guò)構(gòu)造器的方式創(chuàng)建的JSONObject對(duì)象:"derek":"23","dad":"49","mom":"45"通過(guò)fro
30、mObject方法將map對(duì)象轉(zhuǎn)換為JSONObject對(duì)象:"derek":"23","dad":"49","mom":"45"通過(guò)構(gòu)造器的方式創(chuàng)建的JSONArray:"derek","dad","mom"通過(guò)fromObject方法將Arraylist對(duì)象轉(zhuǎn)換為JSONArray對(duì)象:"derek","dad","mom"將HashMap對(duì)象通過(guò)fro
31、mObject方法轉(zhuǎn)換為JSONArray對(duì)象"derek":"23","dad":"49","mom":"45"解析之后的JSON對(duì)象:"derek":23,"dad":49,"mom":45derek:23dad:49mom:45URIs, URLs, and URNs首先,URI,是uniform resource identifier,統(tǒng)一資源標(biāo)識(shí)符,用來(lái)唯一的標(biāo)識(shí)一個(gè)資源。而URL是uniform reso
32、urce locator,統(tǒng)一資源定位器,它是一種具體的URI,即URL可以用來(lái)標(biāo)識(shí)一個(gè)資源,而且還指明了如何locate這個(gè)資源。而URN,uniform resource name,統(tǒng)一資源命名,是通過(guò)名字來(lái)標(biāo)識(shí)資源,比如mailto:java-net。也就是說(shuō),URI是以一種抽象的,高層次概念定義統(tǒng)一資源標(biāo)識(shí),而URL和URN則是具體的資源標(biāo)識(shí)的方式。URL和URN都是一種URI。在Java的URI中,一個(gè)URI實(shí)例可以代表絕對(duì)的,也可以是相對(duì)的,只要它符合URI的語(yǔ)法規(guī)則。而URL類則不僅符合語(yǔ)義,還包含了定位該資源的信息,因此它不能是相對(duì)的,schema必須被指定。ok,現(xiàn)在回答文章
33、開(kāi)頭提出的問(wèn)題,到底是imgUrl好呢,還是imgUri好?顯然,如果說(shuō)imgUri是肯定沒(méi)問(wèn)題的,因?yàn)榧词顾鼘?shí)際上是url,那它也是uri的一種。那么用imgUrl有沒(méi)有問(wèn)題呢?此時(shí)則要看它的可能取值,如果是絕對(duì)路徑,能夠定位的,那么用imgUrl是沒(méi)問(wèn)題的,而如果是相對(duì)路徑,那還是不要用ImgUrl的好。總之,用imgUri是肯定沒(méi)問(wèn)題的,而用imgUrl則要視實(shí)際情況而定。第二個(gè),從HttpServletRequest的javadoc中可以看出,getRequestURI返回一個(gè)String,“the part of this requests URL from the protocol
34、 name up to the query string in the first line of the HTTP request”,比如“POST /some/path.html?a=b HTTP/1.1”,則返回的值為”/some/path.html”?,F(xiàn)在可以明白為什么是getRequestURI而不是getRequestURL了,因?yàn)榇颂幏祷氐氖窍鄬?duì)的路徑。而getRequestURL返回一個(gè)StringBuffer,“The returned URL contains a protocol, server name, port number, and server path, bu
35、t it does not include query string parameters.”,完整的請(qǐng)求資源路徑,不包括querystring??偨Y(jié)一下:URL是一種具體的URI,它不僅唯一標(biāo)識(shí)資源,而且還提供了定位該資源的信息。URI是一種語(yǔ)義上的抽象概念,可以是絕對(duì)的,也可以是相對(duì)的,而URL則必須提供足夠的信息來(lái)定位,所以,是絕對(duì)的,而通常說(shuō)的relative URL,則是針對(duì)另一個(gè)absolute URL,本質(zhì)上還是絕對(duì)的。注:這里的絕對(duì)(absolute)是指包含scheme,而相對(duì)(relative)則不包含scheme。 Java網(wǎng)絡(luò)連接之HttpURLConnect
36、ion與HttpClient 區(qū)別及聯(lián)系TTP 協(xié)議可能是現(xiàn)在 Internet 上使用得最多、最重要的協(xié)議了,越來(lái)越多的 Java 應(yīng)用程序需要直接通過(guò) HTTP 協(xié)議來(lái)訪問(wèn)網(wǎng)絡(luò)資源。在 JDK 的 包中已經(jīng)提供了訪問(wèn) HTTP 協(xié)議的基本功能:HttpURLConnection。 HttpURLConnection是java的標(biāo)準(zhǔn)類,HttpURLConnection繼承自URLConnection,可用于向指定網(wǎng)站發(fā)送GET請(qǐng)求、POST請(qǐng)求。它在URLConnection的基礎(chǔ)上提供了如下便捷的方法: ·
37、; int getResponseCode():獲取服務(wù)器的響應(yīng)代碼。· String getResponseMessage():獲取服務(wù)器的響應(yīng)消息。· String getResponseMethod():獲取發(fā)送請(qǐng)求的方法。· void setRequestMethod(String method):設(shè)置發(fā)送請(qǐng)求的方法。 在一般情況下,如果只是需要Web站點(diǎn)的某個(gè)簡(jiǎn)單頁(yè)面提交請(qǐng)求并獲取服務(wù)器響應(yīng),HttpURLConnection完全可以勝任。但在絕大部分情況下,Web站點(diǎn)的網(wǎng)
38、頁(yè)可能沒(méi)這么簡(jiǎn)單,這些頁(yè)面并不是通過(guò)一個(gè)簡(jiǎn)單的URL就可訪問(wèn)的,可能需要用戶登錄而且具有相應(yīng)的權(quán)限才可訪問(wèn)該頁(yè)面。在這種情況下,就需要涉及Session、Cookie的處理了,如果打算使用HttpURLConnection來(lái)處理這些細(xì)節(jié),當(dāng)然也是可能實(shí)現(xiàn)的,只是處理起來(lái)難度就大了。 為了更好地處理向Web站點(diǎn)請(qǐng)求,包括處理Session、Cookie等細(xì)節(jié)問(wèn)題,Apache開(kāi)源組織提供了一個(gè)HttpClient項(xiàng)目,看它的名稱就知道,它是一個(gè)簡(jiǎn)單的HTTP客戶端(并不是瀏覽器),可以用于發(fā)送HTTP請(qǐng)求,接收HTTP響應(yīng)。但不會(huì)緩存服務(wù)器的響
39、應(yīng),不能執(zhí)行HTML頁(yè)面中嵌入的Javascript代碼;也不會(huì)對(duì)頁(yè)面內(nèi)容進(jìn)行任何解析、處理。 簡(jiǎn)單來(lái)說(shuō),HttpClient就是一個(gè)增強(qiáng)版的HttpURLConnection,HttpURLConnection可以做的事情HttpClient全部可以做;HttpURLConnection沒(méi)有提供的有些功能,HttpClient也提供了,但它只是關(guān)注于如何發(fā)送請(qǐng)求、接收響應(yīng),以及管理HTTP連接。 使用HttpClient發(fā)送請(qǐng)求、接收響應(yīng)很簡(jiǎn)單,只要如下幾步即可。1. 創(chuàng)建HttpClie
40、nt對(duì)象。2. 如果需要發(fā)送GET請(qǐng)求,創(chuàng)建HttpGet對(duì)象;如果需要發(fā)送POST請(qǐng)求,創(chuàng)建HttpPost對(duì)象。3. 如果需要發(fā)送請(qǐng)求參數(shù),可調(diào)用HttpGet、HttpPost共同的setParams(HetpParams params)方法來(lái)添加請(qǐng)求參數(shù);對(duì)于HttpPost對(duì)象而言,也可調(diào)用setEntity(HttpEntity entity)方法來(lái)設(shè)置請(qǐng)求參數(shù)。4. 調(diào)用HttpClient對(duì)象的execute(HttpUriRequest request)發(fā)送請(qǐng)求,執(zhí)行該方法返回一個(gè)HttpResponse。5. 調(diào)用HttpResponse的getAllHeaders()、g
41、etHeaders(String name)等方法可獲取服務(wù)器的響應(yīng)頭;調(diào)用HttpResponse的getEntity()方法可獲取HttpEntity對(duì)象,該對(duì)象包裝了服務(wù)器的響應(yīng)內(nèi)容。程序可通過(guò)該對(duì)象獲取服務(wù)器的響應(yīng)內(nèi)容。 另外,Android已經(jīng)成功地集成了HttpClient,這意味著開(kāi)發(fā)人員可以直接在Android應(yīng)用中使用Httpclient來(lái)訪問(wèn)提交請(qǐng)求、接收響應(yīng)。 比如一個(gè)Android應(yīng)用需要向指定頁(yè)面發(fā)送請(qǐng)求,但該頁(yè)面并不是一個(gè)簡(jiǎn)單的頁(yè)面,只有當(dāng)用戶已經(jīng)登錄,而且登錄用
42、戶的用戶名有效時(shí)才可訪問(wèn)該頁(yè)面。如果使用HttpURLConnection來(lái)訪問(wèn)這個(gè)被保護(hù)的頁(yè)面,那么需要處理的細(xì)節(jié)就太復(fù)雜了。 其實(shí)訪問(wèn)Web應(yīng)用中被保護(hù)的頁(yè)面,使用瀏覽器則十分簡(jiǎn)單,用戶通過(guò)系統(tǒng)提供的登錄頁(yè)面登錄系統(tǒng),瀏覽器會(huì)負(fù)責(zé)維護(hù)與服務(wù)器之間的Sesion,如果用戶登錄的用戶名、密碼符合要求,就可以訪問(wèn)被保護(hù)資源了。 在Android應(yīng)用程序中,則可使用HttpClient來(lái)登錄系統(tǒng),只要應(yīng)用程序使用同一個(gè)HttpClient發(fā)送請(qǐng)求,HttpClient會(huì)自動(dòng)維護(hù)與服務(wù)器之間的Se
43、ssion狀態(tài),也就是說(shuō)程序第一次使用HttpClient登錄系統(tǒng)后,接下來(lái)使用HttpClient即可訪問(wèn)被保護(hù)頁(yè)而了。android之HttpURLConnection1.HttpURLConnection連接URL1)創(chuàng)建一個(gè)URL對(duì)象URL url = new URL();2)利用HttpURLConnection對(duì)象從網(wǎng)絡(luò)中獲取網(wǎng)頁(yè)數(shù)據(jù)HttpURLConnection conn = (HttpURLConnection) url.openConnection();3)設(shè)置連接超時(shí)conn.setConnectTimeout(6*1000);4)對(duì)響應(yīng)碼進(jìn)行判斷if (conn.ge
44、tResponseCode() != 200) /從Internet獲取網(wǎng)頁(yè),發(fā)送請(qǐng)求,將網(wǎng)頁(yè)以流的形式讀回來(lái)throw new RuntimeException("請(qǐng)求url失敗");5)得到網(wǎng)絡(luò)返回的輸入流InputStream is = conn.getInputStream();6)String result = readData(is, "GBK"); /文件流輸入 出文件用outStream.write7)conn.disconnect();總結(jié):-記得設(shè)置連接超時(shí),如果網(wǎng)絡(luò)不好,Android系統(tǒng)在超過(guò)默認(rèn)時(shí)間會(huì)收回資源中斷操作.-返回的響
45、應(yīng)碼200,是成功.-在Android中對(duì)文件流的操作和JAVA SE上面是一樣的.-在對(duì)大文件的操作時(shí),要將文件寫到SDCard上面,不要直接寫到手機(jī)內(nèi)存上.-操作大文件是,要一遍從網(wǎng)絡(luò)上讀,一遍要往SDCard上面寫,減少手機(jī)內(nèi)存的使用.這點(diǎn)很重要,面試經(jīng)常會(huì)被問(wèn)到.-對(duì)文件流操作完,要記得及時(shí)關(guān)閉.2.向Internet發(fā)送請(qǐng)求參數(shù)步驟:1)創(chuàng)建URL對(duì)象:URL realUrl = new URL(requestUrl);2)通過(guò)HttpURLConnection對(duì)象,向網(wǎng)絡(luò)地址發(fā)送請(qǐng)求HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();3)設(shè)置容許輸出:conn.setDoOutput(true);4)設(shè)置不使用緩存:conn.setUseCaches(false);5)設(shè)置使用POST的方式發(fā)送
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度餐飲企業(yè)數(shù)字化轉(zhuǎn)型股東合作協(xié)議
- 二零二五年度酒店客房預(yù)訂與商務(wù)洽談與住宿套餐合同
- 二零二五年度婚姻介紹所涉外婚姻服務(wù)合同
- 二零二五餐飲業(yè)商鋪?zhàn)赓U合同附贈(zèng)會(huì)員管理系統(tǒng)合作
- 2025年宜賓貨運(yùn)從業(yè)資格考題
- 《物流系統(tǒng)分析》課件 項(xiàng)目七任務(wù)一 認(rèn)識(shí)物流系統(tǒng)控制
- 村支部書記發(fā)言稿
- 殘聯(lián)疫情發(fā)言稿
- 高中家長(zhǎng)會(huì):高二下學(xué)期期末家長(zhǎng)會(huì)課件
- 吉安市房屋租賃合同
- 汽車制造企業(yè)物流自動(dòng)化
- 危險(xiǎn)化學(xué)品無(wú)倉(cāng)儲(chǔ)經(jīng)營(yíng)單位生產(chǎn)安全事故應(yīng)急救援預(yù)案(新導(dǎo)則版)
- 新人教版九年級(jí)數(shù)學(xué)第一輪總復(fù)習(xí)教案集2018年3月
- 《德伯家的苔絲》
- 保安員培訓(xùn):應(yīng)急處理
- XX附屬中學(xué)集團(tuán)化辦學(xué)三年發(fā)展規(guī)劃
- 金融基礎(chǔ)知識(shí)考試題庫(kù)300題(含答案)
- GB/T 144-2024原木檢驗(yàn)
- 追覓入職測(cè)評(píng)題庫(kù)
- 廣西南寧市2024屆高三3月第一次適應(yīng)性測(cè)試數(shù)學(xué)試題(原卷版)
- 人教版PEP六年級(jí)英語(yǔ)下冊(cè)課件unit1
評(píng)論
0/150
提交評(píng)論