2011-09-28 477 views
4

我正在使用Jsoncpp使用Json :: FastWriter将Json ::值写入字符串。Jsoncpp停止使用基于元素字母顺序写入

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 ::值VAL的顺序,他们似乎是根据第一个字母中的每个元素(”按字母顺序排序名字,姓氏,lookx,looky,lookz,x“等)。你如何防止这一点?我希望它被添加到我添加到Json ::值的顺序中,而不是排序。

如果这是不可能的,如何改变源代码来实现它?

感谢

回答

5

最有可能Jsoncpp使用std::map存储键/值对,它会回报你一个按字母排序的键/值对。我没有研究Jsoncpp的代码,但你有两个选择:

  1. 更改内部使用一个std::list或一些其他有序容器(vector等)的代码。这可能会导致性能损失。
  2. 存储要输出的密钥的顺序并自己生成输出。

然而,正如你可能知道的那样,JSON中的键的顺序没有被指定,所以如果你依赖这个事实,你应该重新考虑你的应用程序设计。