我正在尝试使用wxJSON,这是我的简单测试函数,其中包含我需要的正确形式的示例数据(不幸的是在我的应用程序顺序中很重要):
TEST(wxJSONTestGroup, wxJSON_Write_File_Test)
{
wxFile file("AppWrData.json", wxFile::write_append);
wxFileStream outStream("AppWrData.json");
// construct the JSON value object and add values to it
wxJSONValue root;
root["MicroNet"]["Description"] = wxString("Application Data File");
root["MicroNet"]["Version"] = wxString("3.0.0");
root["CONST TYPS xTyps"][0]["strFmt"] = wxString("s8h");
root["CONST TYPS xTyps"][0]["wTypSize"] = wxString("10");
root["CONST TYPS xTyps"][0]["wNameIx"] = wxString("0");
root["CONST TYPS xTyps"][1]["strFmt"] = wxString("s21s21");
root["CONST TYPS xTyps"][1]["wTypSize"] = wxString("42");
root["CONST TYPS xTyps"][1]["wNameIx"] = wxString("1");
root["CONST TYPS xTyps"][2]["strFmt"] = wxString("s8");
root["CONST TYPS xTyps"][2]["wTypSize"] = wxString("10");
root["CONST TYPS xTyps"][2]["wNameIx"] = wxString("2");
// construct a JSON writer: use the default writer's settings
// wxJSONWriter writer( wxJSONWRITER_STYLED, 0, 4);
wxJSONWriter writer;
writer.Write(root, outStream);
}
//------------------------------------------------------------------------
这是它所做的JSON输出:
{
"CONST TYPS xTyps" : [
{
"wTypSize" : "10",
"wNameIx" : "0",
"strFmt" : "s8h"
},
{
"wTypSize" : "42",
"wNameIx" : "1",
"strFmt" : "s21s21"
},
{
"wTypSize" : "10",
"wNameIx" : "2",
"strFmt" : "s8"
}
],
"MicroNet" : {
"Description" : "Application Data File",
"Version" : "3.0.0"
}
}
这是我想要的输出:
{
"MicroNet" :
{
"Description": "Application Data File",
"Version" : "3.0.0"
},
"CONST TYPS xTyps": [
{
"strFmt": "s8h",
"wTypSize": "10",
"wNameIx": "0"
},
{
"strFmt": "s21s21",
"wTypSize": "42",
"wNameIx": "1"
},
{
"strFmt": "s8",
"wTypSize": "10",
"wNameIx": "2"
}
],
}
任何想法?在我看来输出按字母顺序排列,所以我希望可以禁用输出顺序,但我不明白它是如何可行的。
答案 0 :(得分:0)
我自己找到了答案。 wxJSON使用的容器是stl :: map,或者如果stl不可用,则在wxWidgets中生成等效映射。因此,关键顺序是未定义的。保留的唯一顺序是数组插槽的顺序。