c++ - 是否需要使用 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;
这有什么区别?
解决方案
阅读源代码,可能会有所帮助。operator[] 如果键不存在,则创建空值。然后一个空值也可以添加不存在的键。
差异:
- 第一个只是将“header”的值从 null 转换为 object,第二个不这样做。
- 第一个找到“标题”两次,但第二个只找到一次。
然后两者都可以工作,但第二个必须很快,没有必要传输它。
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;
}
推荐阅读
- emacs - Emacs 公司模式:如果点处的文本等于“结束”,则不完成
- excel - 使用单元格条目更新会议收件人
- react-native - 下载 react-native 项目以及运行现有项目时出现奇怪的错误
- vue.js - 将父母道具传递给Vue,js中的插槽
- aws-lambda - CloudWatch 上的 AWS Lambda 和 Log4j2 日志记录
- javascript - 如何将英制单位转换为公制单位?
- elasticsearch - 如何通过与 aggs 过滤器相同的方法获取 Elasticsearch 术语聚合以过滤多值字段
- mysql - sql数据类型和sql类型的区别?
- azure - Azure 数据工厂:当使用服务主体配置链接服务以访问存储帐户时,map reduce 活动失败
- r - 在 R 中查找具有给定邻近度的两个单词的文档