简单的JSON工作:提取密钥和值

时间:2016-07-05 12:00:24

标签: json delphi superobject

我已经在互联网上阅读了一些JSON工作。作为一个菜鸟,我希望我在跟踪示例时不会像你们中的一些人一样好,因为我需要知识才能知道要搜索什么来获取知识。 Catch22。 ; - )

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

我的问题是,我需要将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进行通信。 app-server和客户端都可以调用api中的函数和过程,但它一次只能是来自客户端 - 服务器或服务器 - 客户端的一个命令。

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

请提出任何建议

PS。 Delphi 10.1 Berlin,Windows10 x64

1 个答案:

答案 0 :(得分: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;