Delphi · 2025年5月20日

DelphiXE11 原生JSON简易使用

需要引用单元 system.JSON

//创建
function TForm3.GetJson: string;
var
  I : Integer;
  _OJson, _OJsonItem : TJSONObject;
  _OJsonArr : TJSONArray;
begin
  _OJson := TJSONObject.Create;
  try
    try
      _OJsonArr := TJSONArray.Create;
      _OJson.AddPair('count', 8);
      for I := 1 downto 0 do
      begin
        _OJsonItem := TJSONObject.Create;
        _OJsonItem.AddPair('socket', I);
        _OJsonItem.AddPair('iLastUseTime', Now);
        _OJsonItem.AddPair('info', '你好'+IntToStr(I));
        _OJsonArr.Add(_OJsonItem);
//        if Assigned(_OJsonItem) then FreeAndNil(_OJsonItem); //在最外层进行释放即可,中间不要释放
      end;
      _OJson.AddPair('list', _OJsonArr);
      Result := _OJson.ToString;
    except
      on E: Exception do
      begin

      end;
    end;
  finally
//    if Assigned(_OJsonArr) then FreeAndNil(_OJsonArr);//在最外层进行释放即可,中间不要释放
    if Assigned(_OJson) then FreeAndNil(_OJson);
  end;
end;
Pascal
//读取
procedure TForm3.Button2Click(Sender: TObject);
var
  _OJson, _OJsonItem : TJSONValue;
  _OJsonArr : TJSONArray;
  _sStr : string;
begin
  _sStr := Memo1.Lines.Text;
  _OJson := TJSONObject.ParseJSONValue(_sStr) as TJSONObject;
  try
    if _OJson = nil then Exit;
    Memo2.Lines.Add(IntToStr(_OJson.GetValue<Integer>('count', 0)));
    _OJsonArr := _OJson.GetValue<TJsonArray>('list');
    if _OJsonArr = nil then Exit;
    for _OJsonItem in _OJsonArr do
    begin
      if _OJsonItem = nil then Continue;
      Memo2.Lines.Add(_OJsonItem.GetValue<string>('socket', 'nil'));
      Memo2.Lines.Add(_OJsonItem.GetValue<string>('iLastUseTime', 'nil'));
      Memo2.Lines.Add(_OJsonItem.GetValue<string>('info', 'nil'));
    end;
  finally
    if Assigned(_OJson) then FreeAndNil(_OJson);
  end;
end;
Pascal

使用起来稍微复杂,没有三方库QJSON封装得好~ 还是不够简单;