【问题标题】:JSON Array From URL in DELPHIDELPHI中来自URL的JSON数组
【发布时间】:2021-11-02 12:12:44
【问题描述】:

我有以下来自 url 链接的 Json 数组。

[{"DATE":"01/10/2021","QUANTITY":4,"UNITPRICE":23.9}, 
 {"DATE":"01/10/2021","QUANTITY":5.85,"UNITPRICE":23.9}, 
 {"DATE":"30/09/2021","QUANTITY":10,"UNITPRICE":23.9}, 
 {"DATE":"04/08/2021","QUANTITY":10,"UNITPRICE":28.83}, 
 {"DATE":"01/07/2021","QUANTITY":1,"UNITPRICE":2.06}, 
 {"DATE":"01/07/2021","QUANTITY":1,"UNITPRICE":2.06}, 
 {"DATE":"30/06/2021","QUANTITY":1,"UNITPRICE":2.06}, 
 {"DATE":"30/06/2021","QUANTITY":1,"UNITPRICE":2.06}]

我想从上面的 JSON 结构中提取数据,然后在 Memo 或 ListView 中显示。

创建一个 Json 数组并将数据放入其中是否正确?当我运行我的代码并单击按钮时,它不显示任何内容。另外,我是 Delphi 的新手。

这是我写的代码:

function GetURLAsString(const aurl: string): string;
var
  IdHTTP1 : TidHTTP;
begin
  IdHTTP1 := TIdHTTP.Create(nil);
  try
    IdHTTP1.IOHandler := TidSSLIOHandlerSocketOpenSSL.Create(IdHTTP1);
    Result := IdHTTP1.Get(aurl);
  finally
    IdHTTP1.Free;
  end;
end;

procedure TForm4.Button1Click(Sender: TObject);
var
  jso : TJsonObject;
  js : TJsonObject;
  jsv : TJsonValue;
  jsa : TJsonArray;
  jsp : TJsonPair;
  data : string;
  i : integer;
  LItem : TListViewItem;
begin
  try
    data := GetURLAsString('http://....');
  except
    on E: exception do
  end;

  try
    jsv := TJSONObject.ParseJSONValue(data);
    try
      jso := jsv as TJSONObject;
      jsa := TJSONArray.Create();
      jsp := TJSONPair.Create('Array', jsa);
      js.AddPair(jsp);
      jsp := jso.Get('Array');
      jsa := jsp.JsonValue as TJsonArray;
      for I  := 0 to jsa.Size - 1 do
      begin
        jso := jsa.Get(i) as TJsonObject;

        for jsp in jso do
        begin
          if jsp.JsonString.Value  = 'DATE' then
          begin
            form4.ListView1.BeginUpdate;
            LItem := form4.ListView1.Items.Add;
            LItem.Text := jso.GetValue('DATE').ToString;
            form4.ListView1.EndUpdate;
          end;
        end;
      end;
    finally
      jsv.Free;
    end;
  except
    on E: exception do
  end;
end;

【问题讨论】:

  • 你应该调试你的代码。找出我们发生了什么以及失败的地方。学习如何调试是初学者为了提高工作效率而需要做的第一件事。

标签: arrays json delphi


【解决方案1】:

我怀疑你会遇到访问冲突,因为你访问了尚未初始化的 js 变量的 AddPair 方法,并且由于你捕获了异常并忽略它,所以你看不到它。

但是,您使解决方案过于复杂,这会导致错误。 这应该有效:

jsa := jsv as TJSONArray;
form4.ListView1.BeginUpdate;
try
 for I  := 0 to jsa.Size - 1 do
    begin
       jso := jsa.Get(i) as TJsonObject;
       LItem := form4.ListView1.Items.Add;
       LItem.Text := jso.GetValue('DATE').ToString;
    end;

 finally
  form4.ListView1.EndUpdate;
 end;
finally
  jsv.Free;
end;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 2016-10-06
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多