求一个数据库函数解析json 如下图要求
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求一个数据库函数解析json 如下图要求相关的知识,希望对你有一定的参考价值。
参考技术A数据库只是用来存储数据的,为什么不把处理数据的部分放在后台?
在这里你需要了解以下几个知识点。
在sqlserver 中存储json ,需要用字符串类型进行存储,一般用nvarchar()或 varchar()进行存储。
openJson:打开Json字符串
IsJson:判断一个字符串是不是合法的Json格式。是返回1,否返回0,null返回null。
Json_Value:从Json字符串中提取值。
Json_Query:Json字符串中提取对象或数组。
Json_Modify:更新Json字符串中的属性值,并返回更新的Json字符串
然后参考图片的需求,获取输入key值中的value字段可以得到如下sql语句。
从JSON中获取输入B的JSON对象
SELECT JSON_QUERY(json, CONCAT('$.',key)) INTO K_VAL;
从B的JSON对象中,获取value字段的值
SELECT JSON_VALUE(K_VAL, '$.value') INTO JSONVALUE;
最终我们的声明的函数大概是:
CREATE FUNCTION PARSEJSON(json VARCHAR(2000), key VARCHAR(200))
RETURNS VARCHAR
BEGIN
declare JSONVALUE VARCHAR;
declare K_VAL VARCHAR;
SELECT JSON_QUERY(json, CONCAT('$.',key)) INTO K_VAL;
SELECT JSON_VALUE(K_VAL, '$.value') INTO JSONVALUE;
return JSONVALUE;
END
json解析字符串-第2讲
如下是一个例子,讲解怎么样解析一串字符串类型的 JSON 数据,然后,提取每一个 JSON 节点的数据;
1 对于一串 string 类型的 JSON 数据,可以使用 cJSON_Parse(); 函数来解析;
2 cJSON_Parse(); 函数解析,得到一个 cJSON 对象,它就相当于一个树的根节点;
然后,JSON 中的元素,就是该根节点下的某一个子节点;
3 通过 cJSON_GetObjectItem() 函数,可以根据指定的 key,获取对应的 value 数值,而且,这个 value 数值
是存放在一个 cJSON 结构中;
//========================================================================
最终,就可以根据 cJSON.type 成员的类型,知道 value 数值存放在哪个成员,然后,提取出来;
//========================================================================
注意:最后,需要使用 cJSON_Delete() 来释放内存;
//========================================================================
#include <stdio.h>
#include <stdlib.h>
#include "cJSON.h"
void json_create(void);
void json_parse(void);
//========================================================
//========================================================
void print_json(cJSON *p)
printf("============================\\n");
printf("type = %d\\n", p->type);
printf("valuestring = %s\\n", p->valuestring);
printf("valueint = %d\\n", p->valueint);
printf("valuedouble = %f\\n", p->valuedouble);
printf("string = %s\\n", p->string);
printf("============================\\n");
//========================================================
//========================================================
int main (int argc, const char * argv[])
json_parse();
//========================================================
//========================================================
void json_parse(void)
// 被解析的JSON数据包
char text[] = "\\"timestamp\\":\\"2013-11-19T08:50:11\\",\\"value\\":1";
cJSON *json , *json_value , *json_timestamp;
// 解析数据包
json = cJSON_Parse(text);
if (!json)
printf("Error before: [%s]\\n",cJSON_GetErrorPtr());
else
print_json(json);
// 解析开关值
json_value = cJSON_GetObjectItem( json , "value");
if( json_value->type == cJSON_Number )
// 从valueint中获得结果
printf("value:%d\\r\\n",json_value->valueint);
print_json(json_value);
// 解析时间戳
json_timestamp = cJSON_GetObjectItem( json , "timestamp");
if( json_timestamp->type == cJSON_String )
// valuestring中获得结果
printf("%s\\r\\n",json_timestamp->valuestring);
print_json(json_timestamp);
// 释放内存空间
cJSON_Delete(json);
运行的结果如下:
[hill@Ubunut10 test1]$./test
============================
type = 6
valuestring = (null)
valueint = 0
valuedouble = 0.000000
string = (null)
============================
value:1
============================
type = 3
valuestring = (null)
valueint = 1
valuedouble = 1.000000
string = value
============================
2013-11-19T08:50:11
============================
type = 4
valuestring = 2013-11-19T08:50:11
valueint = 0
valuedouble = 0.000000
string = timestamp
============================
韦凯峰 Linux C/C++零基础编程教程
Linux系统编程,Openwrt系统开发
以上是关于求一个数据库函数解析json 如下图要求的主要内容,如果未能解决你的问题,请参考以下文章