Jsoncpp停止根据元素的字母顺序进行编写

时间:2011-09-28 11:10:31

标签: c++ json jsoncpp

我正在使用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 ::值的顺序添加,而不是排序。

如果这不可能,那么如何改变源代码来实现呢?

由于

1 个答案:

答案 0 :(得分:5)

Jsoncpp很可能使用std::map来存储键/值对,它将返回按字母顺序排列的键/值对。我没有查看Jsoncpp的代码,但你有两种选择:

  1. 更改代码以在内部使用std::list或其他一些有序容器(vector等)。这可能会导致性能下降。
  2. 存储您想要输出的键的顺序并自行生成输出。
  3. 但是,正如您所知,JSON中的键顺序未指定,因此如果您依赖于这一事实,则应重新考虑您的应用程序设计。