我是 JSON 新手。在我看来,我应该检查从所有对 cJSON_GetObjectItem() 的调用返回的 NULL 指针。但是如果对象中有很多项,那么这种检查就会变得非常冗长。我是否需要检查此调用返回的 NULL,如果需要,有没有比下面显示的更好的方法?
jsonPortArray = cJSON_GetObjectItem(jsonInput,"port");
if (jsonPortArray != NULL)
{
for (portIndex = 0; portIndex < cJSON_GetArraySize(jsonPortArray); portIndex++)
{
jsonPort = cJSON_GetArrayItem(jsonPortArray, portIndex);
if (jsonPort == 0)
break; // Bail out of loop if null ptr.
// ******* Is this safe? I see this style a lot.
port[portIndex].portNum = cJSON_GetObjectItem(jsonPort, "portNum")->valueint;
port[portIndex].portDir = cJSON_GetObjectItem(jsonPort, "portDir")->valueint;
port[portIndex].portType = cJSON_GetObjectItem(jsonPort, "portType")->valueint;
/*
I shortened the list of values to get, but there are MANY.
*/
// ******* Or do I need to check NULLs for every item, like this?
if ( cJSON_GetObjectItem(jsonPort, "portNum") != NULL)
{
port[portIndex].portNum = cJSON_GetObjectItem(jsonPort, "portNum")->valueint;
}
}
}