首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将JSON导入TFDMemTable

将JSON导入TFDMemTable
EN

Stack Overflow用户
提问于 2019-04-20 02:21:06
回答 1查看 1.1K关注 0票数 1

我正在尝试将JSON从TMemo导入到TFDMemTable。在执行时,我得到一个"Exception EAccessViolation...“错误。似乎导致问题的代码行是FDMemTable1.FieldByName('userId').AsString := oProd.GetValue('PutRequest.Item.userId').Value;,这是我将我的第一个条目附加到FDMemTable的地方。我检查了JSON,它的格式似乎是正确的。

下面是我的JSON数组:

代码语言:javascript
复制
{"Jobs":[{"PutRequest":{"Item":{"userId":{"S":"1"},"WorkOrder":{"S":"29236"},"ServiceDate":{"S":"4/12/2019"}}}},{"PutRequest":{"Item":{"userId":{"S":"1"},"WorkOrder":{"S":"29237"},"ServiceDate":{"S":"4/12/2019"}}}}]}

下面是我的代码片段:

代码语言:javascript
复制
uses
  System.JSON;

procedure TForm1.FormCreate(Sender: TObject);
var
  oJson: TJSONObject;
  oArr: TJsonArray;
  oPair: TJSONPair;
  i: Integer;
  oProd: TJSONObject;
begin
  FDMemTable1.FieldDefs.Add('userId', ftString, 5);
  FDMemTable1.FieldDefs.Add('WorkOrder', ftString, 5);
  FDMemTable1.FieldDefs.Add('ServiceDate', ftString, 10);
  FDMemTable1.Active := True;

  oJson := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(Memo1.Lines.Text), 0) as TJSONObject;
  try
    oArr := oJson.Get('Jobs').JsonValue as TJSONArray;
    for i := 0 to oArr.Count - 1 do begin
      oProd := oArr.Items[i] as TJSONObject;
      FDMemTable1.Append;
      FDMemTable1.FieldByName('userId').AsString := oProd.GetValue('PutRequest.Item.userId').Value;
      FDMemTable1.FieldByName('WorkOrder').AsString := oProd.GetValue('PutRequest.Item.WorkOrder').Value;
      FDMemTable1.FieldByName('ServiceDate').AsString := oProd.GetValue('PutRequest.Item.ServiceDate').Value;
      FDMemTable1.Post;
    end;
  finally
    oJson.Free;
  end;
end;

我检查了"oArr“和"oProd”的赋值和值,它们看起来都是正确的。我猜想当我试图给FDMemTable赋值时,我没有正确地寻址JSON。我该如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-20 02:33:42

你忘了加

代码语言:javascript
复制
`FDMemTable1.CreateDataSet;`

在……下面

代码语言:javascript
复制
FDMemTable1.FieldDefs.Add('ServiceDate', ftString, 10);

这意味着您的dataSet字段尚未创建,因此调用

代码语言:javascript
复制
FDMemTable1.FieldByName('userId').AsString

将返回nil并在向其赋值时抛出EV

添加这一行,您就可以开始了

请参阅Jim McKeeth的this guide (视频下面的代码),了解如何正确使用TMemTable以及它能做些什么。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55766112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档