5

Jsoncppを使用して、Json::FastWriterを使用してJson::valueを文字列に書き込みます。

string s;
s.append("me?json=");
val["firstname"] = firstname;
val["lastname"] = lastname;
val["x"] = me->myPos.X;
val["y"] = me->myPos.Y;
val["z"] = me->myPos.Z;
val["lookx"] = me->myOri.X;
val["looky"] = me->myOri.Y;
val["lookz"] = me->myOri.Z;
url.append(writer.write(val));

問題は、Json :: value valに追加した順序のように文字列に表示されないことです。各要素の最初の文字に応じて、アルファベット順に並べ替えられているようです( "firstname、lastname、lookx、looky 、lookz、x "など)。これをどのように防ぎますか?Json :: valueに追加する順序で追加し、並べ替えないようにします。

これが不可能な場合、それを実現するためにソースコードをどのように変更しますか?

ありがとう

4

1 に答える 1

5

ほとんどの場合、Jsoncppはstd::mapキー/値のペアを格納するためにを使用し、アルファベット順に並べられたキー/値のペアを返します。Jsoncppのコードについては調べていませんが、2つの選択肢があります。

  1. 内部でstd::listまたは他の順序付けられたコンテナ(vectorなど)を使用するようにコードを変更します。その結果、パフォーマンスが低下する可能性があります。
  2. 出力するキーの順序を保存し、自分で出力を生成します。

ただし、ご存知かもしれませんが、JSONのキーの順序は指定されていないため、その事実に依存している場合は、アプリケーションの設計を再検討する必要があります。

于 2011-09-28T11:14:07.327 に答える