0

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

我正在使用超级对象,似乎是最好的方法。

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

更短:我需要从 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/App-Server/Many Clients 实现。(App-Server I/O <-> SQL,计算,然后输出到客户端,客户端接收来自app-server的输入/函数调用,更新它的值,然后用户可以调用App-server上的函数,通过使用客户端调用该函数-使用websockets进行通信。应用程序服务器和客户端都可以调用api中的函数和过程,但这将是客户端服务器或服务器客户端一次一个命令。

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

请,任何建议将不胜感激

PS。Delphi 10.1 柏林,Windows10 x64

4

1 回答 1

3

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

这个简单的例子正是我想要的!

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;
于 2016-07-05T12:25:13.807 回答