2016-07-05 71 views
0

我已经阅读了一些在互联网上的JSON工作。作为一个noob,期待我不要跟你们中的一些人一样善于追查例子,因为我需要知识来知道要寻找什么来获取知识。 Catch22。 ;-)简单的JSON工作:提取密钥和值

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

我的问题是,我需要将JSON分离为键/值对,到目前为止,只有我知道密钥是什么,才能获得价值。 将对所有可能的命令检查密钥(在我的应用中密钥是[命令]),并且当命令匹配时,值部分是逗号分隔的参数列表,作为将由侧。服务器/客户端然后调用该命令(一个过程/函数)并传递[commaText]作为其参数。 (可能有JSON在政治上正确的方式取代[commaText],当然你可以对此发表评论,但到目前为止,[commaText]对我来说是一个简单而容易的方式。

更短:我需要从一个JSON对提取两种[键值]和[数值数值]

这是我迄今为止的工作是什么:

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; 

这让我对中的价值如果我已经知道该密钥对是什么。

重述:需要提取b其他键/值作为JSON数据的单独字符串(通常/基本上,我将拥有多个密钥对,其一个命令/一个传输)

更多背景:我有一个SQLDatabase/App-Server /许多客户实施。 (应用程序服务器I/O < - > SQL,计算并输出到客户端,客户端接收来自应用程序服务器的输入/函数调用,更新其值,然后用户可以调用应用程序服务器上的函数使用客户端调用该函数 - 使用websockets进行通信 应用程序服务器和客户端都可以调用api中的函数和过程,但它将成为客户端服务器或服务器客户端的一个命令。

如果它可能不是更容易地创建一个特殊的情况下JSON解析器,因为我的数据常是只有一对,而不是一个大的JSON对象我想知道......

请,有什么建议可以理解的

PS。德尔福10.1柏林,Windows10 64

+1

该库的示例向您展示如何使用 –

+0

什么库@DavidHeffernan? http://docwiki.embarcadero.com/RADStudio/Seattle/en/JSON只构建键/值对,但不提取它们。 – chillum

+1

您正在使用超级对象。阅读其文档。并且FWIW您提到的Emba库确实支持枚举JSON对象 –

回答

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;