void CTunerServer::set_mute(svcServiceRequest *req)
{
const Json::Value ¶m = req->getParam();
int rv = 0;
bool muteStatus = GET_JSON_VAL_UINT(param, "status");
//是否含有键值"status"
if( !param.isMember("status") ){
DINFOP("set_mute:param is nullValue",SLOG2_FA_END);
rv = m_tunercore.mute();
}else{
DINFOP("set_mute:muteStatus=%2d",SLOG2_FA_UNSIGNED(muteStatus),SLOG2_FA_END);
rv = m_tunercore.mute(muteStatus);
}
Json::Value ret_value;
ret_value["rv"] = rv;
req->returnReply(ret_value);
}
上述代码中并不知道 const Json::Value ¶m是否有相应的键值。
方法1:
//判断是否有键值status
param.isMember("status")
方法2:
//由于访问了一个不存在的key,所以会自动添加一个这样的字段,只不过其value为空
param["status"].isNull();
方法2:
//由于访问了一个不存在的key,所以会自动添加一个这样的字段,但是其value为空
if(param["status"].type() == Json::nullValue)
{
}
其中可以看出,方法1为最优解。
这段代码展示了在C++中如何高效地检查Json对象是否包含特定键值。方法1通过`param.isMember(status)`直接判断键值是否存在,被认为是最佳实践,因为它不会在键不存在时自动添加空值。相比之下,方法2和3虽然也能检测,但可能会修改Json对象结构。
1776

被折叠的 条评论
为什么被折叠?



