Closed xiaonuo911teamo closed 4 years ago
我的临时解决方案只是多加了一个判断。
std::string CJsonObject::ToString() const
{
char* pJsonString = NULL;
std::string strJsonData = "";
if (m_pJsonData != NULL)
{
pJsonString = cJSON_PrintUnformatted(m_pJsonData);
}
else if (m_pExternJsonDataRef != NULL)
{
pJsonString = cJSON_PrintUnformatted(m_pExternJsonDataRef);
}
if (pJsonString != NULL)
{
strJsonData = pJsonString;
free(pJsonString);
}
// add
else
{
strJsonData = "{}";
}
return(strJsonData);
}
json数据为空时返回的是{}或[],你试着用{}和[]构建CJsonObject对象再ToString()就知道了。ToString()就是返回真实的json字符串,你这样改反而是错的。
我是这样考虑的。因为使用CJsonObject的默认构造函数,构造出来的一个对象。我认为他是一个空的json对象,应该与{}对应。所以才这样考虑的。 不过看了您的回复,貌似我不修改代码,在构造对象时,通过CJsonObject obj("{}"); 就是我认为的 json 空对象了吧。
CJsonObject obj("{}")可以达到你的目的。 默认构造函数是不构造json的,因为不清楚使用者是想构建{}还是构建[],空的json数组也属于json对象的一种。因此,默认构造函数是不构造json,待调用Add()函数时就能创建使用者所需的json。
当json对象内数据为空时,通过ToString返回值为空字符串。但是标准的空json,应该是{}。Parse也是不能解析空字符串的。