是否有必要使用Json::value object=Json::objectValue来初始化? &g



使用jsoncpp库与json一起工作,是否有必要使用json::objectvalue?

Json::Value jsn_req;
jsn_req["header"] = Json::objectValue;
jsn_req["header"]["sid"] = 0;

或:

Json::Value jsn_req;
jsn_req["header"]["sid"] = 0;

这两者有什么区别?

阅读源代码,可能会有所帮助。如果键不存在,操作符[]将创建空值。然后一个空值也可以添加not exist键

diff:

  1. 第一个只是转换"header"从null到object,第二个不这样做。
  2. 第一个查找"头"两次,但第二次只找到一次。

两种方法都可以,但第二种方法必须快,没有必要进行转换。

Value& Value::operator[](const char* key) {
return resolveReference(key, key + strlen(key));
}
Value& Value::resolveReference(char const* key, char const* end) {
JSON_ASSERT_MESSAGE(
type() == nullValue || type() == objectValue,
"in Json::Value::resolveReference(key, end): requires objectValue");
if (type() == nullValue)
*this = Value(objectValue);
CZString actualKey(key, static_cast<unsigned>(end - key),
CZString::duplicateOnCopy);
auto it = value_.map_->lower_bound(actualKey);
if (it != value_.map_->end() && (*it).first == actualKey)
return (*it).second;
ObjectValues::value_type defaultValue(actualKey, nullSingleton());
it = value_.map_->insert(it, defaultValue);
Value& value = (*it).second;
return value;
}

最新更新