2016-03-01 108 views
3

我試圖創建一個使用rapidjson的JSON,我遇到了一些意想不到的問題,無法生成正確的輸出。rapidjson正確的JSON創建

我創建和填充像這樣的文件:

Document d; 
d.SetObject(); 

rapidjson::Document::AllocatorType& allocator = d.GetAllocator(); 

size_t sz = allocator.Size(); 

d.AddMember("version", 1, allocator); 
d.AddMember("testId", 2, allocator); 
d.AddMember("group", 3, allocator); 
d.AddMember("order", 4, allocator); 

Value tests(kArrayType); 
Value obj(kObjectType); 
Value val(kObjectType); 

obj.AddMember("id", 1, allocator); 

string description = "a description"; 
val.SetString(description.c_str(), static_cast<SizeType>(description.length()), allocator); 
obj.AddMember("description", val, allocator); 

string help = "some help"; 
val.SetString(help.c_str(), static_cast<SizeType>(help.length()), allocator); 
obj.AddMember("help", val, allocator); 

string workgroup = "a workgroup"; 
val.SetString(workgroup.c_str(), static_cast<SizeType>(workgroup.length()), allocator); 
obj.AddMember("workgroup", val, allocator); 

val.SetBool(true); 
obj.AddMember("online", val, allocator); 

tests.PushBack(obj, allocator); 
d.AddMember("tests", tests, allocator); 

// Convert JSON document to string 
rapidjson::StringBuffer strbuf; 
rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(strbuf); 
d.Accept(writer); 

當我運行這段代碼,我期待獲得此JSON:

{ 
    "version": 1, 
    "testId": 2, 
    "group": 3, 
    "order": 4, 
    "tests": [ 
     { 
      "id": 1, 
      "description": "a description", 
      "help": "some help", 
      "workgroup": "a workgroup", 
      "online": true 
     } 
    ] 
} 

但實際產生的輸出...

{ 
    "version": 1, 
    "testId": 2, 
    "group": 3, 
    "order": 4, 
    "tests": [ 
     { 
      "id": 1, 
      "description": "a description", 
      "help": "some help", 
      "workgroup": "a workgroup", 
      "online": tr{ 
    "version": 1, 
    "testId": 2, 
    "group": 3, 
    "order": 4, 
    "tests": [ 
     { 
      "id": 1, 
      "description": "a description", 
      "help": "some help", 
      "workgroup": "a workgroup", 
      "online": true 
     } 
    ] 
} 

任何想法?

+0

你是否必須這樣做''allocator''魔術?還是有重載,你可以在沒有它們的情況下構建DOM?我的直覺告訴我,這看起來有點偏離。 – BitTickler

+0

除此之外,您多次重複使用相同的''val''實例。也許這是一個非使用案例。 – BitTickler

+0

從我可以告訴我,我只能從SetString調用中刪除分配器,並沒有任何效果。關於重複使用val,我已經嘗試過不重用它,結果也是一樣的。 –

回答

2

最後,我設法跟蹤問題,直到我輸出的字符串與OutputDebugString在VS.如果我保存了結果字符串(由GetString()給出),則輸出如預期!

通過調試陷阱挫敗我是!