全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:550
推到 Plurk!
推到 Facebook!

請問Delphi XE3有內建的方法可以將JSON的資料排序的嗎?

答題得分者是:kuraki5336
cgsn
一般會員


發表:7
回覆:3
積分:2
註冊:2004-02-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2018-06-28 17:02:23 IP:60.248.xxx.xxx 未訂閱
請問Delphi XE3有內建的方法可以將JSON的資料排序的嗎?
例如:
{
"1":"Mark"
"3":"Mary"
"4":"HULK"
"2":"SAM"
}
我想要排序後變成
{
"1":"Mark"
"2":"SAM"
"3":"Mary"
"4":"HULK"
}
謝謝!!
kuraki5336
初階會員


發表:13
回覆:35
積分:34
註冊:2010-06-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2018-06-29 23:54:03 IP:114.38.xxx.xxx 未訂閱
---------------------------------------------------------------------------------
var
mDict : TObjectDictionary< Integer, String >;
marr : TArray< Integer >;
jSonData:ISuperObject;
JsonArray:ISuperObject;
begin

//本身有來源並且來源有序號 所以應該不需要用到這段

mDict.Add(Key, Value);
mDict.Add(Key, Value);
mDict.Add(Key, Value);
mDict.Add(Key, Value);

marr:= mDict.Keys.ToArray
TArray.Sort(marr);

for i in arr do
begin
JsonData := SO;
JsonData.s[inttostr(i)] := mDict.Items[i];
JsonArray.AsArray.Add(JsonData);
end;
---------------------------------------------------------------------------------

如果知道來源的話應該就直接
JsonDataRequest := SO(來源);
JsonDataReturn := SO;

for 0 to JsonDataRequest .Count -1 then
JsonDataReturn.s[inttostr(i)] := JsonDataRequest[inttostr(i)].Astring;

Resutl := JsonDataReturn.tostring
---------------------------------------------------------------------------------

===================引 用 cgsn 文 章===================
請問Delphi XE3有內建的方法可以將JSON的資料排序的嗎?
例如:
{
"1":"Mark"
"3":"Mary"
"4":"HULK"
"2":"SAM"
}
我想要排序後變成
{
"1":"Mark"
"2":"SAM"
"3":"Mary"
"4":"HULK"
}
謝謝!!

編輯記錄
kuraki5336 重新編輯於 2018-06-29 23:55:10, 註解 無‧
kuraki5336 重新編輯於 2018-06-29 23:57:02, 註解 無‧
kuraki5336 重新編輯於 2018-06-29 23:58:14, 註解 無‧
cgsn
一般會員


發表:7
回覆:3
積分:2
註冊:2004-02-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2018-07-05 10:31:16 IP:60.248.xxx.xxx 未訂閱
問題解決了,感謝kuraki5336,附上程式碼,不過有遇到一個奇怪的問題,
如果先取得oDict.ExtractPair(tArr[i]).Key再取oDict.ExtractPair(tArr[i]).Value之後oDict.ExtractPair(tArr[i]).Value就會變空白,
反過來就沒事,有誰知道這是什麼問題嗎?



[code delphi]
Var
oDict : TObjectDictionary< String, String >;
tArr : TArray< String >;
i:integer;
sValue,sKey:String;
jo:TJSONObject;
jp:TJSONPair;
begin
sValue := '';
sKey := '';
try

oDict := TObjectDictionary< String, String>.Create;
oDict.Add('a','Mark');
oDict.Add('c','Mary');
oDict.Add('z','Eric');
oDict.Add('d','Hulk');
oDict.Add('b','SAM');

tArr := oDict.Keys.ToArray;
TArray.Sort(tArr);

jo := TJSONObject.Create;
for i := LOW(tArr) to High(tArr) do begin
sValue := oDict.ExtractPair(tArr[i]).Value;
sKey := oDict.ExtractPair(tArr[i]).Key;
jp := TJSONPair.Create(sKey,sValue);
jo.AddPair(jp);
end;
Memo1.Lines.Clear;
Memo1.Lines.Add(jo.ToString);
finally
jo.Free;
oDict.Free;
end;
end;
[/code]
編輯記錄
cgsn 重新編輯於 2018-07-05 10:42:44, 註解 無‧
kuraki5336
初階會員


發表:13
回覆:35
積分:34
註冊:2010-06-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2018-07-06 00:09:39 IP:114.38.xxx.xxx 未訂閱
//      sValue := oDict.ExtractPair(tArr[i]).Value;
// sKey := oDict.ExtractPair(tArr[i]).Key;
sValue := oDict.Items[tArr[i]];
sKey := tArr[i] ;

恩.......................................這樣卡緊
系統時間:2024-04-26 18:46:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!