2018/07/05

JSONObject Sort by Delphi


在 KTOP 看到有人在問 JSON 物件能否排序。

第一時間想著官方沒有類似 TJSONObject.Sort 的方法,除非再自行加工改寫。

後來看到其他會員回答的排序法,而樓主似乎也不排斥『要自己寫程式』的方式。

內容使用到『泛型物件』和『DBXJSON』,一時手癢,就自己試著玩玩看:



 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
uses
  Generics.Collections,
  SysUtils,
  DBXJSON;

var
  LDemoJsonObject: TJSONObject;
  LDict : TDictionary<string, string>;
  i: Integer;
  LStr: string;
  LArray : TArray<string>;
begin
  LDemoJsonObject := TJSONObject.ParseJSONValue('{"z":"Mark","g":"Mary","k":"HULK","a":"SAM"}') as TJSONObject;
  LDict := TDictionary<string, string>.Create;
  try
    for i := 0 to LDemoJsonObject.Size-1 do
      LDict.Add(LDemoJsonObject.Get(i).JsonString.Value, LDemoJsonObject.Get(i).JsonValue.Value);
    WriteLn('Disorder...');
    for LStr in LDict.Keys do
      WriteLn(LDict.Items[LStr]);
    // Sort
    LArray := LDict.Keys.ToArray;
    TArray.Sort<string>(LArray);
    WriteLn('Order...');
    LDemoJsonObject := TJSONObject.Create;
    for LStr in LArray do
      LDemoJsonObject.AddPair(LStr, LDict.Items[LStr]);
    WriteLn(LDemoJsonObject.ToString);
  finally
    LDict.Free;
  end;
  Readln;
end.

執行結果:



上述內容 XE1 以上適用。

See also:

沒有留言:

張貼留言