我已经在互联网上阅读了一些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
答案 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;