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讲的主要内容,如果未能解决你的问题,请参考以下文章