首页 > 解决方案 > 是否需要使用 Json::value object=Json::objectValue 来初始化?

问题描述

要使用库 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;

这有什么区别?

标签: c++json

解决方案


阅读源代码,可能会有所帮助。operator[] 如果键不存在,则创建空值。然后一个空值也可以添加不存在的键。

差异:

  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;
}

推荐阅读