使用lkjson处理Json数据

     阅读 77 次    更新时间:2025/2/28    

使用lkjson处理Json数据

1,载入

 var Jso: TlkJSONbase;

begin

 Jso:=TlkJSON.ParseText(Memo1.Text);

从字符串中载入Json,并返回一个TlkJSONbase对象,当然使用完毕后记得释放掉它。

 

2,节点处理

TlkJSONbase是所有Json总类的父类,通过它的SelfType方法可以获取节点的类型,然后根据类型把它转化成相应的类去操作。

例如 (Json as TlkJSONObject)

下面列出全部的类型与操作说明:

 

jsBase

值对类型。相关类:TlkJSONobjectmethod。

(Json as TlkJSONobjectmethod).Name: 节点的名称

(Json as TlkJSONobjectmethod).ObjValue: 节点的值,注意ObjValue的类型还是TlkJSONbase依然需要用SelfType来判断具体类型。

 

jsList,

数组类型。相关类:TlkJSONlist

(Json as TlkJSONlist).Count:获取数组的长度。

(Json as TlkJSONlist).IndexOf(n): 获取数组的第N个元素,返回值依然是TlkJSONbase。

 

jsObject

对象类型。相关类:TlkJSONObject。

(Json as TlkJSONObject).Name: 获取属性的长度

(Json as TlkJSONObject).IndexOfName('N'): 获取名为N的属性的值,返回值依然是TlkJSONbase。

 

jsNumber,

整数或浮点数,可以用Value来直接获取,不用转化类了。

 

jsString,

字符串。同上。

 

jsBoolean,

布尔值,同上。

 

jsNull,

空值,同上。

 

3,介于以上理解为了加深印象我写了一个简单的json格式化函数。


uses uLkJSON;

 

function FormatJson(Jso: TlkJSONbase; Level:Integer): String;

var

  I:Integer;

begin  

  if Jso is TlkJSONobjectmethod then begin

    with TlkJSONobjectMethod(Jso) do begin

      Result:='"'+Name+'" : ';

      Jso:=ObjValue;

    end;

  end else

    Result:='';

                      

  TlkJSONObject(Jso).IndexOfName()

  if Jso is TlkJSONObject then begin

    Result:=Result+'{'#13#10;

    for I := 0 to Jso.Count - 1 do begin

      Result:=Result+StringOfChar(#9,Level+1)+FormatJson(Jso.Child[I],Level+1);

      if I<>Jso.Count-1 then

        Result:=Result+','#13#10

      else

        Result:=Result+#13#10;

    end;

    Result:=Result+StringOfChar(#9,Level)+'}';

  end

  else if Jso is TlkJSONlist then begin   

    Result:=Result+'['#13#10;

    for I := 0 to Jso.Count - 1 do begin

      Result:=Result+StringOfChar(#9,Level+1)+FormatJson(Jso.Child[I],Level+1);

      if I<>Jso.Count-1 then

        Result:=Result+','#13#10

      else

        Result:=Result+#13#10;

    end;

    Result:=Result+StringOfChar(#9,Level)+']';

  end

  else begin

    if Jso.SelfType=jsString then

      Result:=Result+'"'+Jso.Value+'"'

    else

      Result:=Result+VarToStr(Jso.Value);      

  end;

end;

 

procedure TForm20.Button1Click(Sender: TObject);

var Jso: TlkJSONbase;

begin

  Jso := TlkJSON.ParseText(Memo1.Text);

  try

    Memo1.Clear;

    Memo1.Text := FormatJson(Jso,0);

  finally

    Jso.Free;

  end;

end;



在Delphi 7中,由于官方并未原生支持JSON的编码和解码,通常需要使用第三方库来实现。以下是几种常见的方法:

1. 使用SuperObject

SuperObject是一个轻量级的JSON解析和生成库,广泛用于Delphi 7中。以下是一个简单的示例,展示如何使用SuperObject进行JSON的编码和解码:

delphi
uses
  superobject;

var
  j, a: ISuperObject;
begin
  // 创建一个JSON对象
  j := TSuperObject.Create(stObject);
  j.I['数字'] := 123; // 添加一个整数类型的键值对
  j.S['字符串'] := '值'; // 添加一个字符串类型的键值对

  // 创建一个JSON数组
  a := TSuperObject.Create(stArray);
  a.I[''] := 111; // 添加一个数组元素
  a.I[2] := 's'; // 添加第三个数组元素

  // 将数组添加到JSON对象中
  j['arr'] := a;

  // 输出JSON字符串
  ShowMessage(j.AsJSon);

  // 解析JSON字符串
  j := SO('{"数字":123,"字符串":"值","arr":[111,null,"s"]}');
  ShowMessage(j.S['字符串']); // 输出: 值
end;

2. 使用lkJSON

lkJSON是另一个常用的JSON库,支持快速解析和生成JSON数据。以下是一个简单的示例:

delphi
uses
  lkJSON;

var
  Json, childJson: TlkJSONobject;
  ResponseJson: string;
begin
  ResponseJson := '{"success":"true","msg":"操作成功","data":{"key":"value"}}';
  Json := TlkJSON.ParseText(ResponseJson) as TlkJSONobject;
  try
    ShowMessage(Json.Field['msg'].Value); // 输出: 操作成功
    childJson := Json.Field['data'] as TlkJSONobject;
    ShowMessage(childJson.Field['key'].Value); // 输出: value
  finally
    FreeAndNil(Json);
  end;
end;



 
 

Copyright 2003-2008 All Rights Reserved 自由风工作室 版权没有 [湘ICP备06002185号]
.