數(shù)據(jù)類型和Json格式_第1頁(yè)
數(shù)據(jù)類型和Json格式_第2頁(yè)
數(shù)據(jù)類型和Json格式_第3頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 10數(shù)據(jù)類型和 Json 阮一峰1.前幾天,我才知道有一種簡(jiǎn)化的數(shù)據(jù)交換格式,叫做yaml。茅塞頓開。三種類型:第一種類型是標(biāo)量scalar,也就是一個(gè)單獨(dú)的字符串strin或數(shù)字number其次種類型是序列sequence,也就是假設(shè)干個(gè)相關(guān)的數(shù)據(jù)arra比方“北京,上?!?。第三種類型是映射mapping, 也就是一個(gè)名/Name/value這又稱作散列has或字典dictionary“。程語言中,只要有了數(shù)組array和對(duì)象object就能夠儲(chǔ)存一切數(shù)據(jù)了。2.我馬上想到了 json。式,能夠在效勞器之間交換數(shù)據(jù)。當(dāng)時(shí)通用的數(shù)據(jù)交換語言是XML,但是DouglasCrockfordXML

2、Json。DouglasCrockford定的都規(guī)定了。并列的數(shù)據(jù)之間用逗號(hào)“, “分隔。映射用冒號(hào)“: “表示。并列數(shù)據(jù)的集合數(shù)組用方括號(hào)(“)表示。映射的集合對(duì)象用大括號(hào)“表示。上面四條規(guī)章,就是 Json格式的全部?jī)?nèi)容。比方,下面這句話:160064001800“城市“:“北京“,“面積“:16800,“人口“:1600,“城市“:“上?!?“面積“:6400,“人口“:1800假設(shè)事先知道數(shù)據(jù)的構(gòu)造,上面的寫法還可以進(jìn)一步簡(jiǎn)化:“北京“,16800,1600,“上?!?6400,1800 xml,成為了互聯(lián)網(wǎng)上最受歡送的數(shù)據(jù)交換格式。 json3.學(xué)習(xí) javascript 的時(shí)候,我

3、曾經(jīng)一 度搞不清楚 “ 數(shù)組“(object表示數(shù)據(jù)的集合。a=1,2,3,4a=0:1,1:2,2:3,3:4,然后你運(yùn)行 alert(a1),兩種狀況下也可以用對(duì)象表示,那么我到底該用哪一種呢?4.namename。但是問題是,很多編程語言中,都有一種叫做 “關(guān)聯(lián)數(shù)組“array的東西。這種數(shù)組中的數(shù)據(jù)是知名稱的。javascriptvar a=“城市“:“北京“,“面積“:16800,“人口“:1600;但是,也可以定義成一個(gè)關(guān)聯(lián)數(shù)組:a“城市“=“北京“;a“面積“=16800;a“人口“=1600;這起初也加劇了我對(duì)數(shù)組和對(duì)象的混淆,后來才明白,在Javascriptphpphpva

4、r a=1,2,3,4;a”foo”=”Hello World”;alert(a.length);4php5a5完P(guān)HPJSON 阮一峰日期: 2022114目前,JSON 已經(jīng)成為最流行的數(shù)據(jù)交換格式之一,各大網(wǎng)API今日,我想總結(jié)一下 PHPAPI必需了解的學(xué)問。從5.2版本開頭,PHP原生供給json_encode和json_decode函數(shù),前者用于編碼,后者用于解碼。一、json_encodejson個(gè)數(shù)組轉(zhuǎn)換的例子:$arr = array (”a”=1,”b”=2,”c”=3,”d”=4,”e”=5);echo json_encode($arr);結(jié)果為“a“:1,“b“:2,“

5、c“:3,“d“:4,“e“:5再看一個(gè)對(duì)象轉(zhuǎn)換的例子:$obj-body= ”another post”;$obj-id= 21;$obj-approved= true;$obj-favorite_count = 1;$obj-status= NULL;echo json_encode($obj);結(jié)果為“body“:“another post“,“id“:21,“approved“:true, “favorite_count“:1,“status“:nulljsonutf-8json_encodeutf-8null。當(dāng)中ISO-8859-1一點(diǎn)要特別留意。二、索引數(shù)組和關(guān)聯(lián)數(shù)組PHP 支持

6、兩種數(shù)組,一種是只保存“值“value的索引數(shù)組indexed array“名值對(duì)name/value關(guān)聯(lián)數(shù)組associativearray。由于 javascript 不支持關(guān)聯(lián)數(shù)組,所以 json_encode只將索引數(shù)組 indexed array轉(zhuǎn)為數(shù)組格式,而將關(guān)聯(lián)數(shù)組associative array轉(zhuǎn)為對(duì)象格式。比方,現(xiàn)在有一個(gè)索引數(shù)組$arr = Array(”one”, ”two”, ”three”);echo json_encode($arr);結(jié)果為:“one“,“two“,“three“假設(shè)將它改為關(guān)聯(lián)數(shù)組:$arr = Array(”1”=”one”, ”2”=”t

7、wo”, ”3”=”three”);echo json_encode($arr);結(jié)果就變了:“1“:“one“,“2“:“two“,“3“:“three“留意,數(shù)據(jù)格式從“數(shù)組變成了“對(duì)象。假設(shè)你需要將“索引數(shù)組“強(qiáng)制轉(zhuǎn)化成“對(duì)象“,可以這樣寫json_encode( (object)$arr );或者json_encode ( $arr, JSON_FORCE_OBJECT );三、類class的轉(zhuǎn)換PHPclass Foo constERROR_CODE = ”404”;public$public_ex = ”this is public”; private$private_ex = ”

8、this is private!”;protected $protected_ex = ”this should be protected”;public function getErrorCode return self:ERROR_CODE;現(xiàn)在,對(duì)這個(gè)類的實(shí)例進(jìn)展 json 轉(zhuǎn)換:$foo = new Foo;$foo_json = json_encode($foo);echo $foo_json;輸出結(jié)果是“public_ex“:“this is public“可以看到,除了公開變量publi,其他東西有變量、方法等等都遺失了。四、json_decodePHP是一個(gè)例子:$json =

9、 ”“foo“: 12345”;$obj = json_decode($json); print $obj-”foo”; / 12345PHP是數(shù)組。比方:$json = ”“a“:1,“b“:2,“c“:3,“d“:4,“e“:5”;var_dump(json_decode($json);結(jié)果就是生成一個(gè) PHP 對(duì)象:object(stdClass)#1 (5) “a“ = int(1)“b“ = int(2)“c“ = int(3)“d“ = int(4)“e“ = int(5)PHP,json_decode需要加一true:$json = ”“a“:1,“b“:2,“c“:3,“d“:

10、4,“e“:5”;var_dump(json_decode($json,true);結(jié)果就生成了一個(gè)關(guān)聯(lián)數(shù)組:array(5) “a“ = int(1)“b“ = int(2)“c“ = int(3)“d“ = int(4)“e“ = int(5)五、json_decode的常見錯(cuò)誤json$bad_json = “ ”bar”: ”baz” “;$bad_json = ” bar: “baz“ ”;$bad_json = ” “bar“: “baz“, ”;錯(cuò)。第一個(gè)的錯(cuò)誤是,json 的分隔符delimiter只允許使用雙引號(hào),不能使用單引號(hào)。其次個(gè)的錯(cuò)誤是,json 名值對(duì)的“名錯(cuò)誤是,

11、最終一個(gè)值之后不能添加逗號(hào)trailingcomma。jsonobjec和數(shù)組json_decodenull。var_dump(json_decode(“Hello World“); /null六、參考材料PHP ManualEd Finkler, JSON is Everybody”s Friend完phpjsjsonphpjavascriptjson。jsonjsjsphpjsonphpjson_decodephpphp 也供給了 json_encode 函數(shù)來將數(shù)據(jù)轉(zhuǎn)化成 json 格式。那么,jsjsonphpjson_encodejson 是否完全一樣呢?今日,站長(zhǎng)就和大家一起來探討

12、這個(gè)問題。為例,先來看一下兩者之間的區(qū)分。1、一維數(shù)組php$array=array(“1“,“2“,“3“);json復(fù)制代碼 代碼如下:“1“,“2“,“3“。細(xì)心的朋友很快就覺察,轉(zhuǎn)化后得到的 json 字符串,就是javascriptjs來訪問呢?js需要使用urlencode函數(shù)對(duì)其編碼,如:代碼如下:a href=“javascript:show(”)“ id=“aj“訪問json復(fù)制代碼 代碼如下:function show(str)var jobj=eval_r(decodeURI(str);alert(jobj2);大家自己試一試就會(huì)覺察,是的,可以用 js 中訪問一維數(shù)個(gè)字

13、符的值。上鍵名:php$array=array(”a”=”1”,”b”=”2”,”c”=”3”);使用 json_encode 函數(shù)轉(zhuǎn)化后,對(duì)應(yīng)的 json 字符串為“a“:“1“,“b“:“2“,“c“:“3“。變成了,那么這個(gè)字符串是否也可以按上面那樣處理后被js訪問呢?我們不防試一試:ahref=“javascript:show(”1”,”b”=”2”,”c”=”3”);?”)“ id=“aj“jsonechofunction show(str)var jobj=eval_r(decodeURI(str);alert(jobj.a);PHPjsoneval換成:復(fù)制代碼 代碼如下:fun

14、ction show(str)var jobj=eval_r(”(”+decodeURI(str)+”)”);alert(jobj.a);再試試吧!怎么樣,可以訪問了吧。這告知我們,在使用evaljson這里要留意,盡管 PHPjson“a“:“1“,“b“:“2“,“c“:“3“被傳遞給 js 后無法被直接解釋為jsonjsjson復(fù)制代碼 代碼如下:var jobj=“a“:“1“,“b“:“2“,“c“:“3“;alert(jobj.b);2、二維數(shù)組直接給出例如代碼:復(fù)制代碼 代碼如下:a href=“javascript:show(”)“jsonfunction show(str)v

15、ar jobj=eval_r(decodeURI(str);alert(jobj00);大家運(yùn)行,會(huì)覺察,這跟一維數(shù)組差不多,這是不帶鍵名的請(qǐng)看例如代碼:復(fù)制代碼 代碼如下:ahref=“javascript:show(”1”,“b“=”2”,”3”id=“aj“訪問jsonfunction show(str)var jobj=eval_r(”(”+decodeURI(str)+”)”);alert(jobj0.a);json點(diǎn)不一樣。上面我們用的是alert(jobj00);而這里我們用的是alert(jobj0.a)json的訪問方式。們對(duì)第一維添加鍵名,看看訪問方式又有什么不同:復(fù)制代碼

16、 代碼如下:ahref=“javascript:show(”array(”1”,”2”,”3”);function show(str)var jobj=eval_r(”(”+decodeURI(str)+”)”);alert(jobj.k1);這里我們使用的是jobj.k1這樣的方式,大家肯定已經(jīng)覺察了,只要數(shù)組中jsonjson數(shù)組元素是數(shù)字索引,所以在jsonk1這樣的方式來訪問。復(fù)制代碼 代碼如下:a href=“javascript:show(”array(“a“=”1”,”2”,”3”);?”)“ id=“aj“訪問jsonfunction show(str)var jobj=eval_r(”(”+decodeURI(str)+”)”);alert(jobj.k.a);正如上面所提到的,只要含有鍵名,就必需以json對(duì)象.鍵名的方式來訪問,假設(shè)有多個(gè)鍵就要用json對(duì)象.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論