求一个数据库函数解析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 如下图要求的主要内容,如果未能解决你的问题,请参考以下文章

使用HttpClient+Json解析器爬取数据并存入数据库

qt解析json汉字和数字一起的时候提示数据错误

我遇到一个json解析时的错误求指教,​代码和报错如下:

C++下如何将json数据存入mysql数据库

javascript的JSON对象

JSON解析UITableViewController