현재 사용중인 JSON serializer 클래스가 있습니다. 그것은 내가 연구하고있는 실험적인 코드를위한 것입니다. 이 코드는 cpprestsdk를 사용하고 있습니다. 직렬화는 rapidjson 또는 cpprestsdk의 json을 사용하도록 설정됩니다. 나는 아무 문제 JSON 변환 할 수 없습니다문자열로 변환 할 때 rapidjson 결과가 일치하지 않습니다.
virtual void toJson(rapidjson::Document& json) const =0;
virtual void toJson(web::json::value& json) const =0;
virtual void fromJson(const rapidjson::Value& json) =0;
virtual void fromJson(const web::json::value& json) =0;
: 같은
그래서 예를 들어, 클래스의 가상 함수를 찾습니다. 저는 현재 클래스 객체를 JSON으로 변환 한 다음이를 파일로 문자열로 내보내고 있습니다. rapidjson을 사용하면 결과가 달라진다는 것을 알았습니다. 을 변경하지, 이것은 연속 실행을위한"base": {
"name": "base",
:이 같은 조각을보고, 다른 실행에
"base": {
"name\u0000refere": "base",
:
는 일부 수출에, 나는 이런 조각을 볼 수 코드.
이 필드는 실제로 세계적과 같이 const char *
을 정의됩니다 kObjectKeyName
이 const char *kObjectKeyName = "name";
으로 정의된다
void Object::toJson(rapidjson::Document& json) const {
using namespace rapidjson;
json.SetObject(); // Reset and clear any existing
auto& allocator = json.GetAllocator();
json.AddMember(StringRef(kObjectKeyName), Value(name.c_str(), allocator), allocator);
json.AddMember(StringRef(kObjectKeyPrioritizeTable), Value(prioritizeTable), allocator);
json.AddMember(StringRef(kObjectKeyPrioritizeGreaterOn), Value(prioritizeGreaterOn), allocator);
}
하는 것으로 :
const char *kSymbolKeyName = "name";
const char *kSymbolKeyReferenceName = "referenceName";
문제가있는 JSON 객체를 생성하는 코드는 것 같습니다.
그리고이 클래스의 toJson
의 모습에 발신자 : 나는 rapidjson::Document
의 및 할당자를 사용하고있는 방법에서 줄기 수있는 문제의
using namespace rapidjson;
json.SetObject(); // Reset and clear any existing
auto& allocator = json.GetAllocator();
for (const auto& it : tables) {
Document iJson;
it.second->toJson(iJson);
json.AddMember(Value(it.first.c_str(), allocator), iJson, allocator);
}
부. 나는 내가 SetObject
전화를 걸면 toJson
호출이 자신의 할당 자라고 끝낼 것이라고 믿습니다.
내 계획은 Document
대신 Value
을 toJson
에 사용하도록 코드를 수정 한 다음 할당자를 인수로 전달하는 것입니다. 저는 게으르다가 서명을 원했기 때문에 rapidjson이나 cppsrestsdk의 아들을 뒤집기가 쉽기 때문에 주로 그렇게하고 싶지 않았습니다.
오, 그래, 문자열로 출력 코드 파일은 다음
std::ofstream out("output.json");
rapidjson::Document outDoc;
dataSet.toJson(outDoc);
rapidjson::StringBuffer buffer;
buffer.Clear();
rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(buffer);
outDoc.Accept(writer);
out << buffer.GetString();
out.close();
최근 rapidjson을 사용하기 시작 나는 바보/홀수하고있는 중이 야 의심의 여지가 뭔가가 없습니다. 나는 내 문제를 좁히고 내 방식의 오류를 더 잘 이해하려고 노력하고있다.