2017-05-12 19 views
1

I JSON 문자열을 생성하기 위해 다음과 같은 C++ 코드를 가지고 :C++ RapidJSON 클리어 작성 문자열

StringBuffer JSONData; 
PrettyWriter<StringBuffer> writer(JSONData); 
writer.StartObject(); 
writer.String("hello"); 
writer.String("world"); 
writer.String("t"); 
writer.Bool(true); 
writer.String("f"); 
writer.Bool(false); 
writer.String("n"); 
writer.Null(); 
writer.String("i"); 
writer.Uint(123); 
writer.String("pi"); 
writer.Double(3.1416); 
writer.EndObject(); 

cout << JSONData.GetString() << endl; 
//OUTPUTS: 
{ 
    "hello": "world", 
    "t": true, 
    "f": false, 
    "n": null, 
    "i": 123, 
    "pi": 3.1416, 
} 


JSONData.Clear(); 
writer.Reset(JSONData); //Wont compile 
writer.StartObject(); //FAILS !Base::hasRoot_ 
writer.String("hello"); 
writer.String("world"); 
writer.String("t"); 
writer.Bool(true); 
writer.EndObject(); 
cout << JSONData.GetString() << endl; 

그러나, 내가 이전 JSON 데이터를 출력 한 후 다른 JSON 객체를 만들려합니다. 그러나 이것은 오류 Assertion failed: !Base::hasRoot_을 반환합니다. 이 문제를 어떻게 해결할 수 있습니까?

답변

1

This linkPrettyWriter의 RapidJSON 헤더입니다. 247 줄에서 발생한 오류를 찾을 수 있습니다. 나는 프로가 아니지만, 작가는 하나의 물건에 대해서만 일한다고 생각한다. 나는 이것이 완전한 대답은 아니지만 그것이 어쨌든 암시 일 것이라고 생각했다.

또한 this 링크를 사용하면 PrettyWriter을 사용하는 방법에 대한 힌트를 얻을 수 있습니다.

reset(), RapidJSON documentation이 도움이 될 수 있습니다.

이 함수는 Writer 객체를 여러 개의 JSON을 출력하기 위해 재사용 할 수 있도록하기 위해 새로운 스트림과 기본 설정으로 작성기를 재설정합니다. 다만,

StringBuffer JSONData; 
PrettyWriter<StringBuffer> writer(JSONData); 
writer.StartObject(); 
// ... 
writer.EndObject(); 

JSONData.Clear(); 
writer.Reset(JSONData); 
writer.StartObject(); 
// ... 
writer.EndObject(); 

심지어 다른 출력 스트림을 생성하고 다시 그것을 분석 할 수 있습니다 :

Writer<OutputStream> writer(os1); 
writer.StartObject(); 
// ... 
writer.EndObject(); 
writer.Reset(os2); 
writer.StartObject(); 
// ... 
writer.EndObject(); 

당신이 뭔가를 시도 할 수 :

이 매우 문서는 다음 예제를 제공합니다 확실하게 ..

+0

네,하지만 작동하도록 재설정 할 수 없습니다 ... 내가하는대로 컴파일하지 않습니다. –

+0

@TVAvanHeste ren 예를 들어 답을 편집했습니다 – Badda

+0

믿을 수 없지만,이 작품은 ... 나는 이미이 옵션을 시도했지만 오타 나 뭔가를 만들어야한다고 생각했습니다. 아무튼 감사합니다. –