摘要:Json提供了輕量級(jí)的數(shù)據(jù)交換格式,它已經(jīng)被越來(lái)越多的開(kāi)發(fā)語(yǔ)言所支持。本文提供了一個(gè)利用Delphi XE開(kāi)發(fā)環(huán)境來(lái)調(diào)用Json數(shù)據(jù)的實(shí)例。
關(guān)鍵詞: Json SuperObject DelphiXE
隨著AJAX應(yīng)用的發(fā)展,使用JSON格式進(jìn)行通信變得越來(lái)越流行。雖然Json誕生于Web開(kāi)發(fā)領(lǐng)域,但是對(duì)Json的語(yǔ)言支持已經(jīng)超出了Web開(kāi)發(fā)領(lǐng)域的范疇。本文提供了一個(gè)利用Delphi XE開(kāi)發(fā)環(huán)境來(lái)調(diào)用Json數(shù)據(jù)的實(shí)例。
一、Json
JSON(Javascript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換語(yǔ)言,以文字為基礎(chǔ),且易于讓人閱讀。它是基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一個(gè)子集。
由于 JSON是為方便 JavaScript 調(diào)用而創(chuàng)建的,因此,JSON 的數(shù)據(jù)格式非常簡(jiǎn)單。可以用 JSON 傳輸一個(gè)簡(jiǎn)單的 String,Number,Boolean,也可以傳輸一個(gè)數(shù)組,或者一個(gè)復(fù)雜的 Object 對(duì)象。
JSON用于描述數(shù)據(jù)結(jié)構(gòu),有以下形式存在:
對(duì)象 (object):一個(gè)對(duì)象以“{”開(kāi)始,并以“}”結(jié)束。一個(gè)對(duì)象包含一系列非排序的名稱(chēng)/值對(duì),每個(gè)名稱(chēng)/值對(duì)之間使用“,”分區(qū),對(duì)象是可以層層嵌套的。
名稱(chēng)/值對(duì)(collection):名稱(chēng)和值之間使用“:”隔開(kāi),一般的形式是:
{name:value}
我們以中國(guó)天氣網(wǎng)的Json數(shù)據(jù)舉例:
訪(fǎng)問(wèn)http://www.weather.com.cn/data/cityinfo/101010100.html可以得到類(lèi)似如下的Json數(shù)據(jù):
{“weatherinfo”:{“city”:”北京”,”cityid”:”101010100”,”temp1”:”17℃”,”temp2”:”25℃”,”weather”:”陰”,”img1”:”n2.gif”,”img2”:”d2.gif”,”ptime”:”18:00”}}
注:101010100是北京市的編碼,讀者可以根據(jù)網(wǎng)站提供的編碼規(guī)則靈活更換城市。
二、SuperObject
SuperObject 是支持Delphi開(kāi)源的 JSON 工具包,可生成 JSON 數(shù)據(jù)以及進(jìn)行 JSON 解析。
此工具包可以在http://code.google.com/p/superobject/downloads/list網(wǎng)站下載,截止到筆者投稿日最新版本是1.2.4版。
SuperObject提供了兩個(gè)類(lèi)庫(kù)文件SuperObject.pas和superxmlparser.pas,其中SuperObject.pas用于操作json數(shù)據(jù),而superxmlparser.pas用于從XML數(shù)據(jù)中解析出json數(shù)據(jù)。
下面簡(jiǎn)單介紹一下SuperObject工具包的常用方法:
2.1 構(gòu)建方法:
定義字符串: JsonString = ‘{“City”:”北京”, “weather”:”陰”}’;
定義SuperObject對(duì)象: oJson: ISuperObject;
構(gòu)建方法:oJson := SO(JsonString);//等價(jià)于oJson:= TSuperObject.ParseString(JsonString);
2.2 訪(fǎng)問(wèn)方法:
superObject工具包可以用S,I,D,B,C方法讀取字符串型,數(shù)值型,雙精度浮點(diǎn)型,布爾型,貨幣型數(shù)據(jù)的值。另外它還支持調(diào)用對(duì)象(O)、方法(M)和空對(duì)象(N)。
如:s := oJson.S[' City '];//將字符串s賦值為北京。
2.3 數(shù)據(jù)操作方法:
superObject可以對(duì)Json數(shù)據(jù)進(jìn)行增加、修改和刪除等操作。
如: oJson.S[City] := ‘上海’;//將Json數(shù)據(jù)修改為’{“City”:”上海”, “weather”:”陰”}。
三、編程實(shí)現(xiàn)
接下來(lái)我們根據(jù)Json數(shù)據(jù)的特征和SuperOject類(lèi)庫(kù)為我們提供的方法,利用Delphi XE編程工具來(lái)實(shí)現(xiàn)獲取指定城市天氣預(yù)報(bào)的功能。
uses superObject,superXmlparser,msxml;
procedure TFrmWViewer.btnGetClick(Sender: TObject);
var
req: IXMLHttpRequest;
s:string;
obj: ISuperObject;
begin
req := CoXMLHTTP.Create;
req.open('GET', edtUrl.Text, 1, EmptyParam, EmptyParam);
req.send(EmptyParam);
s:=SO(req.responseText).S['weatherinfo'];
obj:=SO(s);
lblCity.Caption:=obj.S['city'];
lblWeather.Caption:=obj.S['weather'];
lblLowest.Caption:=obj.S['temp1'];
lblHighest.Caption:=obj.S['temp2'];
end;
程序運(yùn)行界面如下:
(此程序在windows 7+Delphi XE環(huán)境下調(diào)試通過(guò)。)
四、結(jié)束語(yǔ)
Json具有非冗長(zhǎng)性,易于閱讀和編寫(xiě),易于機(jī)器解析和生成的優(yōu)良特性,使得JSON成為理想的數(shù)據(jù)交換語(yǔ)言。這種輕量級(jí)的數(shù)據(jù)交換格式為我們C/S模式程序開(kāi)發(fā)中減小服務(wù)負(fù)載提供了一種新技巧。
參考資料:
[1] JSON介紹http://www.json.org/json-zh.html
[2] Subject介紹 http://code.google.com/p/superobject/