JSON_VALUE Function (JSON)

本文通过多个示例演示如何使用SQL语句中的JSON_VALUE函数从JSON对象中提取特定值。包括简单的键值提取、处理嵌套结构、默认值设置及错误处理等场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

The following statement returns a value of 10:

SELECT JSON_VALUE('{"item1":10}', '$.item1') AS "value" FROM DUMMY;
The following statement returns a value of 5:

SELECT JSON_VALUE('{"item1":{"sub1":10}, "item2":{"sub2":5}, "item3":{"sub3":7}}', '$.*.sub2') AS "value" FROM DUMMY;
The following statement returns a value of 0:

SELECT JSON_VALUE('[0, 1, 2, 3]', '$[0]') AS "value"  FROM DUMMY;
The following statement returns the value "No last name found":

SELECT JSON_VALUE('{"firstname":"John"}', '$.lastname' DEFAULT 'No last name found' ON EMPTY) AS "Last Name" FROM DUMMY;
The following statement causes a type conversion error to demonstrate the behavior for ERROR ON ERROR:

SELECT JSON_VALUE('{"item":"string"}', '$.item' RETURNING DECIMAL ERROR ON ERROR) AS "Item" FROM DUMMY;
The following statement demonstrates what happens when there is no value (the object does not have the name "last name"):

SELECT JSON_VALUE('{"firstname":"John"}', 'strict $.lastname' ERROR ON ERROR) AS "Last Name" FROM DUMMY;

``` 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是什么意思
最新发布
03-22
在这段代码中,`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` 中。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值