您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關Delphi7怎樣用superobject解析Json數據,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
前言
現在不管Webapi還是一般的數據通訊,用的基本都是Json,以前很多的應用程序都是用delphi7開發的,為了維護舊的程序以及與新的接口進行對接(如微信支付寶支付等),我們就用到了superobject來操作Json數據。
由于我們用的是D7,里面沒有泛型等這些用法,所以也不存在什么類的序列化與反序列化直接生成Json。操作起來可能比較C#,Android等要麻煩點。
superobject單元
這個可以在網上下載,后面我們會這個unit放到我的網盤上,這里我們用到的是
就是上面這個superobject.pas,我的版本是1.25的,原來用了個1.24的里面有幾個小BUG(如Currency類型的輸入0解析不了),在1.25里面解決了。
基本用法
var
j, a: ISuperObject;
//不能是TSuperObject,盡管有TSuperObject這個類。
begin
j:=TSuperObject.Create(stObject);
//創建一個json對象,如果參數是stArray,j就是一個json數組,參數還可以是其它的變量類型,比如字符串,數值之類的,看起來很強大,但是如果參數是一個描述了json的字符串的話,你會得到一個錯誤。如果想從文本加載,用j:=SO(json文本);
j.I['數字']:=123;
//就等于 {"數字": 123} ,類似的,I還可以變成S,B,C之類的,以表示字符串,布爾型,貨幣型。
j.S['字符串']:="值";
//就等于 {"字符串": “值”} ,類似的,I還可以變成S,B,C之類的,以表示字符串,布爾型,貨幣型。
a:=TSuperObject.Create(stArray);
//創建一個json數組a
a.I['']:=111;
//表示給a數組添加一個111元素。注意[]中的值為'',在數組中其[]的語義進行了顛覆性的改變。
a.I[2]:="s";
//第3個元素值為"s",嗯,[]在superobject的用法還真多
j['arr']:=a;
//把數組a添加進j,其key名為arr
showmessage( j.toJson() );
//查看j的json文本
j:=nil;
//不能寫j.Free
end;
代碼演示
因為這是在項目的邊做邊寫的,所以我們還是用上一章的《Delphi調用動態鏈接庫》PosPayIntf動態庫項目,先看一下我們的目錄結構
我們把Json這塊的處理都放在了BaseClass下的Json文件夾下
其中superobject就是我們引用的Json解析單元,DoJson是我自己封裝的幾個處理返回的方法。
在動態庫的項目里面我們可以看到已經把這兩個單元文件引用進來了。
DoJson單元
在這個單元里面我寫了三個函數
GetJsonStr;獲取Json對應的項目下的字符串
CreateOutMsgJsonStr;生成輸出的OutMsg的Json字符串
CreateOutParaJsonStr;生成輸出OutParaJsonStr的字符串
GetJsonStr
根據輸入的Json字符串,我們找到指定的屬性來獲取對應的字符串
如下
上面傳入的這個Json的字符串
我們通過下面方法獲取對應的值
第一個GetJsonStr(Inparastr,'payinfo'),調用這個后我們的tmpParaStr得到的字符串就變成{"oldsaleno":"","payamt":387.6,"oldposno":"","oldpayno":"","salen
o":"201708181158150001","oldsaledate":"","oldrefinfo":""}
第二個GetJsonStr(tmppParaStr,'Payamt'),調用這個后我們的PayTotal值就獲取到了387.6,然后我們再把字符串轉換為Currency類型即可。
OutParaJsonStr
接口文檔
生成函數
上在就是一個生成Json字符串的函數
這個參數后面幾個我都有加上默認值,所以在調用的時候如果不用輸這些參數就直接給的默認值
調用方法
返回的Json
CreateOutMsgJsonStr
這個方法和上面這個基本一樣,只不通參數不同
接口文檔
接口函數
調用方法
返回的Json
程序調用后的顯示效果
上述就是小編為大家分享的Delphi7怎樣用superobject解析Json數據了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。