2016-03-01 4 views
3

Я пытаюсь создать json с помощью quickjson, и у меня возникают некоторые неожиданные проблемы с генерированием правильного вывода.Создание собственного json-образа quickjson

Я создания и заполнения документа, как это:

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()), результат был таким, как ожидалось!

Отвергнутый ловушкой отладки Я был!