简单的JSON工作:提取键和值

简单的JSON工作:提取键和值,json,delphi,superobject,Json,Delphi,Superobject,我在互联网上读过一些JSON的作品。作为一个noob,希望我在追踪示例方面不如你们中的一些人好,因为我需要知识来知道搜索什么才能获得知识。第22条.-) 我使用superobject,似乎是最好的方法 我的问题是,我需要将JSON分成键/值对,到目前为止,我只能得到值,如果我知道键是什么的话。 将对照所有可能的命令检查键(在我的应用程序中,键是[command]),当命令匹配时,值部分是一个逗号分隔的参数列表,作为将由任何一方启动的命令的参数。然后,服务器/客户端调用该命令(过程/函数),并将[

我在互联网上读过一些JSON的作品。作为一个noob,希望我在追踪示例方面不如你们中的一些人好,因为我需要知识来知道搜索什么才能获得知识。第22条.-)

我使用superobject,似乎是最好的方法

我的问题是,我需要将JSON分成键/值对,到目前为止,我只能得到值,如果我知道键是什么的话。 将对照所有可能的命令检查键(在我的应用程序中,键是[command]),当命令匹配时,值部分是一个逗号分隔的参数列表,作为将由任何一方启动的命令的参数。然后,服务器/客户端调用该命令(过程/函数),并将[commaText]作为其参数传递。(也许有一种政治上正确的方法可以取代[commaText],当然,你也可以对此发表评论,但到目前为止[commaText]对我来说是一种简单易行的方法

Shorter:我需要从JSON对中提取[Key-value]和[value-value]

这就是我迄今为止所做的工作:

function TWebSocketServer.GetValue(const AData: String;
  Key: String): String;
var
  JSON: ISuperObject;
  rowItem: ISuperObject;
  ADataStringStream: TStringStream;
begin 
  ADataStringStream := TStringStream.Create(AData);
  JSON := TSuperObject.ParseStream(ADataStringStream, False);

  rowItem := JSON[Key];
  if Assigned(rowItem) then
    Result := rowItem.AsString
  else Result := '';
end;
如果我已经知道该对的密钥是什么,那么这会得到该对的值

重新启动:需要从JSON数据中提取两个键/值作为单独的字符串(通常/基本上永远,我会拥有多个键对,一个命令/一次传输)

更多背景:我有一个SQLDatabase/appserver/许多客户端实现。(应用服务器I/O SQL,计算,然后输出到客户端,客户端接收来自应用服务器的输入/函数调用,更新其值,然后用户可以通过使用客户端调用该函数调用应用服务器上的函数--使用WebSocket进行通信。 app server和客户端都可以调用api中的函数和过程,但每次只能从客户端服务器或服务器客户端调用一个命令

我想知道创建一个特殊的JSON解析器是否会更容易,因为我的数据总是只有一对,而不是一个大的JSON对象

如果您有任何建议,我们将不胜感激


PS.Delphi 10.1柏林,Windows10 x64

谢谢David,我所需要的一切:-)

这个简单的例子正好说明了我想要的

procedure TfrmWebSocketServer.Button3Click(Sender: TObject);
 var
   item: TSuperAvlEntry;
   obj: ISuperObject;
 begin
  obj := SO('{"Command": "Parameters, Parameters"}');
  for item in obj.AsObject do
  begin
    vcl.Dialogs.ShowMessage(item.Name); //outputs "Command"
    vcl.Dialogs.ShowMessage(item.Value.AsString); //outputs "Parameters, Parameters"
  end;
end;

谢谢大卫,我所需要的一切:-)

这个简单的例子正好说明了我想要的

procedure TfrmWebSocketServer.Button3Click(Sender: TObject);
 var
   item: TSuperAvlEntry;
   obj: ISuperObject;
 begin
  obj := SO('{"Command": "Parameters, Parameters"}');
  for item in obj.AsObject do
  begin
    vcl.Dialogs.ShowMessage(item.Name); //outputs "Command"
    vcl.Dialogs.ShowMessage(item.Value.AsString); //outputs "Parameters, Parameters"
  end;
end;

该库的示例向您展示了什么库@DavidHeffernan?只构建键/值对,而不提取它们。您正在使用superobject。阅读其文档。您提到的Emba库确实支持JSON对象枚举。该库的示例向您展示了什么库@DavidHeffernan?只构建键/值您使用的是superobject。请阅读其文档。您提到的Emba库确实支持JSON对象的枚举