json解析字符串-第2讲

Posted Linux编程学堂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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解析字符串-第2讲的主要内容,如果未能解决你的问题,请参考以下文章

[知了堂学习笔记]_JSON数据操作第2讲(JSON的封装与解析)

指针操作字符串

json内存释放注意-第13讲

json内存释放注意-第13讲

json内存释放注意-第13讲

json构建与解析 - 第1讲