``` 184 void JsonParser::ParseJsonFile(const char* filePath) 185 { 186 json_object* m_jfile = json_object_from_file(filePath); 187 if (m_jfile == NULL) { 188 //MY_LOGE("create json obj failed: %s", json_util_get_last_err()); 189 return; 190 } else { 191 //MY_LOGD("create json obj ok"); 192 } 193 194 int packageNum = json_object_array_length(m_jfile); 195 if (packageNum == 0) { 196 //MY_LOGE("get json obj length error: %s", json_util_get_last_err()); 197 return; 198 } else { 199 // MY_LOGD("get json obj lenght = %d", packageNum); 200 } 201 202 if (json_object_get_object(m_jfile) != NULL) { 203 json_object_object_foreach(m_jfile, packge_name, p_json) { 204 map<string, json_object*>* pInfo = new map<string, json_object*>(); 205 if (json_object_get_object(p_json) != NULL) { 206 json_object_object_foreach(p_json, proporty_name, proporty_value) { 207 json_type type = json_object_get_type(proporty_value); 208 if (type == json_type_int) { 209 // MY_LOGV("%s %s: %d", __FUNCTION__, proporty_name, json_object_get_int(proporty_value)); 210 } else if (type == json_type_double) { 211 // MY_LOGV("%s %s: %f", __FUNCTION__, proporty_name, json_object_get_double(proporty_value)); 212 } else if (type == json_type_boolean) { 213 // MY_LOGV("%s %s: %d", __FUNCTION__, proporty_name, json_object_get_boolean(proporty_value)); 214 } else if (type == json_type_string) { 215 // MY_LOGV("%s %s: %s", __FUNCTION__, proporty_name, json_object_get_string(proporty_value)); 216 } 217 218 pInfo->insert(make_pair(proporty_name, proporty_value)); 219 } 220 } 221 m_config->insert(make_pair(packge_name, pInfo)); 222 } 223 } 224 } 225```m_config->insert是什么意思
时间: 2025-03-21 20:11:14 浏览: 40
在这段代码中,`m_config->insert(...)` 是对一个指针指向的对象(可能是 `std::map` 类型)调用了其成员函数 `insert`。它的作用是将键值对插入到该映射表中。
具体来说:
- 假设 `m_config` 是一个指向 `std::map<std::string, std::map<std::string, json_object*>*>` 的智能指针或普通指针。
- 那么 `m_config->insert(make_pair(packge_name, pInfo))` 就是在向这个映射表中添加一个新的条目,其中键是 `packge_name`(表示 JSON 文件中的包名),而值是指向另一个映射表的指针 `pInfo`。
### 插入过程分解
1. **外层映射 (`m_config`)**
- 键:`packge_name` (字符串类型)
- 值:`pInfo` 指针(指向内部存储属性名称及其对应 JSON 对象的映射)
2. **内层映射 (`pInfo`)**
- 键:JSON 属性名称(如 `"propertyA"`, `"propertyB"` 等)
- 值:对应的 JSON 数据对象(例如整数、浮点数、布尔值等类型的 JSON 数据)
因此,整个数据结构可以看作一种嵌套的键值对设计,用于保存从 JSON 文件解析出的数据,并按照层级关系组织起来。
---
### 示例分析
假设有如下 JSON 内容:
```json
{
"Package1": {
"PropertyA": 1,
"PropertyB": true
},
"Package2": {
"PropertyC": "Hello",
"PropertyD": 3.14
}
}
```
经过上述代码处理后,会生成类似这样的内存结构:
- `m_config["Package1"]`: 包含两个子属性 `{("PropertyA", <int>) , ("PropertyB", <bool>)}`
- `m_config["Package2"]`: 包含两个子属性 `{("PropertyC", <string>), ("PropertyD", <double>)}`
每当我们遇到一个新的 `package_name`,都会创建新的 `pInfo` 映射,并将其与 `package_name` 绑定存入 `m_config` 中。
---
阅读全文
相关推荐


















