arrays - Delphi 7 中使用 JSON 进行数组处理

标签 arrays json delphi

我收到的回复如下:

{
    "successful": true,
    "responseMessage": "OK",
    "responseCode": 2000,
    "messages": [
        {
            "messageId": "da86ede3-83de-4080-9c20-e8a335a7ac25",
            "messageType": "MessageComposeSendNotification",
            "queuedDateTime": 1402092032000,
            "processAttemptCount": 0,
            "processed": false
        },
        {
            "messageId": "382556a3-0654-4a1c-9b54-8393097d9ec9",
            "messageType": "RecordFileImport",
            "queuedDateTime": 1410811005000,
            "processAttemptCount": 1,
            "processed": false
        }
    ]
}

我只需执行 js.Field['successful'].value 就可以很好地访问前三个字段call 或其他字段名称。我现在需要访问Messages大批。我想做的是逐步执行 Messages 中的每一项。如果MessageType"RecordFileImport"我想保存MessageID到字符串列表。

现在我无法访问Messages 。我想我需要创建一个新的 tlkJSONObject或者可能是tlkJSONList访问其内容,但我似乎无法实例化该对象,并且不知道如何浏览项目。

我使用的是 Delphi 7 和 LkJSON v1.07。

最佳答案

Field[] 属性返回一个 TlkJSONbase 对象。您可以使用该属性来访问所有字段,甚至数组。访问 messages 字段时,您可以使用其 CountChild[] 属性,而不是使用其 Value 属性特性。例如:

var
  js: TlkJSONbase;
  Messages: TlkJSONbase;
  MessageIDs: TStringList;
  I: Integer;
begin
  ...
  js := ...;
  ...
  messages := js.Field['messages'];
  MessageIDs := TStringList.Create;
  try
    for I := 0 to messages.Count-1 do
    begin
      if VarToStr(messages.Child[I].Field['messageType'].Value) = 'RecordFileImport' then
        MessageIDs.Add(VarToStr(messages.Child[I].Field['messageId'].Value));
    end;
    ...
  finally
    MessageIDs.Free;
  end;
end;

或者,您可以将 messages 字段类型转换为 TlkJSONlist 并使用其 ForEach() 方法。例如:

procedure TMyClass.GetMessageIDs(ElName: string; Elem: TlkJSONbase; data: pointer; var Continue: Boolean);
begin
  if VarToStr(Elem.Field['messageType'].Value) = 'RecordFileImport' then
    TStringList(data).Add(VarToStr(Elem.Field['messageId'].Value));
end;

procedure TMyClass.ProcessJson;
var
  js: TlkJSONbase;
  Messages: TlkJSONlist;
  MessageIDs: TStringList;
begin
  ...
  js := ...;
  ...
  messages := js.Field['messages'] as TlkJSONlist;
  MessageIDs := TStringList.Create;
  try
    messages.ForEach(GetMessageIDs, MessageIDs);
    ...
  finally
    MessageIDs.Free;
  end;
end;

关于arrays - Delphi 7 中使用 JSON 进行数组处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25879911/

相关文章:

python - 如何改写代码更优雅

c++ - 为什么我的数组值更新为随机值?

java - 如何在 Java 中根据用户输入创建数组并对其执行操作

Delphi XE - RawByteString 与 AnsiString

Delphi:使用 URL 转发下载文件

c - C中一维和二维数组的区别

javascript - 如何将文件名和文件扩展名添加到将 JSON 数组导出到 CSV 字符串然后导出到 javascript 文件的 window.open 方法?

javascript - 将 JSON 文件加载到数组时的 Ajax 回调和变量范围

javascript - 读取 json 文件并将特定数组附加到外部范围列表 - javascript - Nodejs

c# - Delphi 编写的 DLL 发生内存访问冲突。尝试通过 DLLImport 访问