Delphi将StringGrid中的数据保存到Json文件中

时间:2017-01-04 07:17:18

标签: json delphi-xe5

我有一个stringGrid,第一行中的字段来自CSV,第二行中的字段是来自DB中表格的ColumnNames。

现在点击保存btn后,它应该创建一个Json文件,如下所示

{
"GHARGA": "GHARGA",
"SELLINGPRICE1": "SELLPRICE1",
"SELLPRICE2": "SELLPRICE2",
"SELLPRICE3": "SELLPRICE3",
"PCODE": "PCODE"
}

我试过这样:

 procedure TfrmMapping.btnsaveClick(Sender: TObject);
var
  Dat1: TStringList;
  i: Integer;
  lJsonObj: TJSONObject;
begin
  lJsonObj := TJSONObject.Create;

  Dat1 := TStringList.Create;

  if btnsave.Caption = 'Save' then
  begin
     for i := 0 to StrGrdCsv.RowCount - 1 do
     begin
     Dat1.AddStrings(StrGrdCsv.Rows[i]);
     end;

    for i := Dat1.Count - 1 Downto StrGrdCsv.ColCount do
    begin
      lJsonObj.AddPair(TJSONPair.Create(TJSONString.Create(Dat1.Strings[i]),
      TJSONString.Create(Dat1.Strings[i])));
    end;

    TFile.WriteAllText(cmbBXDBTables.Text + '.json', lJsonObj.ToString);
    btnsave.Caption := 'Load Data';
      end;
      end;

但它正在创建

 {
    "GHARGA": "GHARGA",
    "SELLPRICE1": "SELLPRICE1",
    "SELLPRICE2": "SELLPRICE2",
    "SELLPRICE3": "SELLPRICE3",
    "PCODE": "PCODE"
     }

1 个答案:

答案 0 :(得分:2)

根据@DavidHeffemann和@RemyLeebeau的建议修改了代码

procedure TfrmMapping.btnsaveClick(Sender: TObject);
var
  i: Integer;
  lJsonObj: TJSONObject;
begin
  lJsonObj := TJSONObject.Create;

  if btnsave.Caption = 'Save' then
  begin
    for i := 0 to StrGrdCsv.ColCount do
    begin
      lJsonObj.AddPair(StrGrdCsv.Cells[i, 0], StrGrdCsv.Cells[i, 1]);
    end;
    TFile.WriteAllText(cmbBXDBTables.Text + '.json', lJsonObj.ToString);
    btnsave.Caption := 'Load Data';
  end;
end;

修改了For循环,并使用String Grid的单元格使其工作。

谢谢你,@ DavidHeffemann和@RemyLeebeau的建议。