wxJSON输出文件行的排序与预期不同

时间:2015-03-03 00:08:08

标签: json

我正在尝试使用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" 
    }
    ],
}

任何想法?在我看来输出按字母顺序排列,所以我希望可以禁用输出顺序,但我不明白它是如何可行的。

1 个答案:

答案 0 :(得分:0)

我自己找到了答案。 wxJSON使用的容器是stl :: map,或者如果stl不可用,则在wxWidgets中生成等效映射。因此,关键顺序是未定义的。保留的唯一顺序是数组插槽的顺序。