2011-09-28 62 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中的鍵的順序沒有被指定,所以如果你依賴這個事實,你應該重新考慮你的應用程序設計。

相關問題