私は、インターネット全体で JSON の作業を少し読みました。知識を得るために何を検索すればよいかを知るには知識が必要なので、初心者として、例を追跡するのが苦手な人もいると思います。Catch22. ;-)
私はスーパーオブジェクトを使用していますが、最善の方法のようです。
私の質問は、JSON をキーと値のペアに分離する必要があるということです。これまでのところ、キーが何であるかを知っている場合にのみ値を取得できました。キー (私のアプリではキーは [コマンド] です) は、すべての可能なコマンドに対してチェックされ、コマンドが一致する場合、値の部分は、いずれかの側で開始されるコマンドの引数として、パラメーターのコンマ区切りリストです。 . 次に、サーバー/クライアントはコマンド (プロシージャ/関数) を呼び出し、[commaText] を引数として渡します。([commaText] を置き換える JSON の政治的に正しい方法があるかもしれません。もちろん、それについてコメントすることもできますが、これまでのところ、[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;
ペアのキーがすでにわかっている場合、これはペアの値を取得します。
言い換えると、キー/値の両方を JSON データから個別の文字列として抽出する必要があります (通常/基本的に、複数のキー ペアを所有し、その 1 つのコマンド/1 つの送信を行うことになります)
詳細な背景: SQLDatabase/App-Server/Many Clients の実装があります。(App-Server I/O <-> SQL、計算、クライアントへの出力、クライアントは app-server から入力/関数呼び出しを受け取り、その値を更新し、ユーザーは App-server で関数を呼び出すことができます。クライアントを使用してその関数を呼び出します -- 通信に websockets を使用します.app-server と client の両方が API で関数とプロシージャを呼び出すことができますが、client-server または server-client から一度に 1 つのコマンドになります。
また、特別なケースの JSON パーサーを作成するのは簡単ではないのではないかと思っていました。なぜなら、私のデータは常に 1 つのペアであり、大きな JSON オブジェクトではないからです...
お願いします、どんな提案でも大歓迎です
PS。Delphi 10.1 ベルリン、Windows10 x64