一、c语言获取json中的数据。

1、先要有cJOSN库,两个文件分别是cJSON.c和cJSON.h。

2、感性认识



char * json = "{ \"json\" : { \"id\":1, \"nodeId\":11, \"deviceId\":111, \"deviceName\":\"aaa\", \"ieee\":\"01212\", \"ep\":\"1111\", \"type\":\"bbb\" }}";
char * json1 = "{\"id\":1, \"nodeId\":11, \"deviceId\":111, \"deviceName\":\"aaa\"}";
cJSON * root;
cJSON * format;
int value_int;
char * value_string; root = cJSON_Parse(json);
format = cJSON_GetObjectItem(root,"json");
value_int = cJSON_GetObjectItem(format,"nodeId")->valueint;
value_string = cJSON_GetObjectItem(format,"ieee")->valuestring;
printf( "%d\n", value_int );
printf( "%s\n", value_string );
cJSON_Delete(root); root = cJSON_Parse(json1);
value_int = cJSON_GetObjectItem(root,"id")->valueint;
value_string = cJSON_GetObjectItem(root,"deviceName")->valuestring;
printf( "%d\n", value_int );
printf( "%s\n", value_string );
cJSON_Delete(root);


结果:

11
01212
1
aaa

二、cJSON库


1、json的数据结构 


c语言中json数据是采用链表存储的

typedef struct cJSON {

struct cJSON *next,*prev;// 数组 对象数据中用到

struct cJSON *child;// 数组 和对象中指向子数组对象或值

int type;// 元素的类型,如是对象还是数组

char *valuestring;// 如果是字符串

int valueint; // 如果是数值

double valuedouble;// 如果类型是cJSON_Number

char *string;// The item's name string, if this item is the child of, or is in the list of subitems of an object.

} cJSON;

三、cJSON使用

{

"name": "Jack (\"Bee\") Nimble",

"format": {

"type":       "rect",

"width":      1920,

"height":     1080,

"interlace":  false,

"frame rate": 24

}

}

"name": "Jack (\"Bee\") Nimble",

"format": {

"type":       "rect",

"width":      1920,

"height":     1080,

"interlace":  false,

"frame rate": 24

}

}

1、字符串解析成json结构体

1):讲字符串解析成json结构体。

cJSON *root = cJSON_Parse(my_json_string);

2):获取某个元素

cJSON *format = cJSON_GetObjectItem(root,"format");

int framerate = cJSON_GetObjectItem(format,"frame rate")->valueint;

int framerate = cJSON_GetObjectItem(format,"frame rate")->valueint;

3):讲json结构体转换成字符串

char *rendered=cJSON_Print(root);

4):删除

cJSON_Delete(root);

2:构建一个json结构体 

cJSON *root,*fmt;

root=cJSON_CreateObject();

cJSON_AddItemToObject(root, "name", cJSON_CreateString("Jack (\"Bee\") Nimble"));

cJSON_AddItemToObject(root, "format", fmt=cJSON_CreateObject());

cJSON_AddStringToObject(fmt,"type",     "rect");

cJSON_AddNumberToObject(fmt,"width",        1920);

cJSON_AddNumberToObject(fmt,"height",       1080);

cJSON_AddFalseToObject (fmt,"interlace");

cJSON_AddNumberToObject(fmt,"frame rate",   24)

out =cJSON_Print(root);

printf("%s\n",out);

cJSON_Delete(root);

free(out);

[置顶] cJSON库(构建json与解析json字符串)-c语言的更多相关文章

  1. C语言cJSON库的使用,解析json数据格式

    C语言cJSON库的使用,解析json数据格式 摘自:https://www.cnblogs.com/piaoyang/p/9274925.html 对于c语言来说是没有字典这样的结构的,所以对于解析 ...

  2. JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串;JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象

    JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串:JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象

  3. Python | JSON 数据解析(Json & JsonPath)

    一.什么是JSON? JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范)的一 ...

  4. Python3基础 json.loads 解析json格式的数据,得到一个字典

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  5. JSON.parse 解析json字符串时,遇换行符报错

    Json字符串转换成Json对象时候,有两种方式: 假设d是json字符串: 1,eval('(' + d + ')'). 2,JSON.parse(d): 但是以上方式有隐患,如果Json字符串有换 ...

  6. C#使用Json.NET解析Json

    本文转载自 http://xiaosheng.me/2016/10/01/article25/ 最近在 C# 项目中需要使用到 Json 格式的数据,我简单上网搜索了一下,基本上有两种操作 Json ...

  7. Android原生生成JSON与解析JSON

    JSON数据是一种轻量级的数据交换格式,在Android中通常应用于client与server交互之间的传输数据.像如今在网上有非常多解析JSON数据的jar包,可是归根究竟用的都是Android原生 ...

  8. scala解析json —— json4s 解析json方法汇总

    使用json4s的框架,包括spark,flink 1.org.json4s 引入pom的方法 对于本地支持,引入以下依赖项添加到pom中 <dependency> <groupId ...

  9. JSON.parse 解析json字符串时,遇字符串换行符,解析失败

    今天遇到json字符串转对象时报错了,发现有个字符串有换行符,仔细找了原因. 结果是因为JSON.parse转json字符串时遇到一些特殊字符需要先转义,如图所示 然后尝试了各路大神介绍的办法,均不适 ...

随机推荐

  1. [React] React Router: Nested Routes

    Since react-router routes are components, creating nested routes is as simple as making one route a ...

  2. linux diff具体解释

    diff是Unix系统的一个非常重要的工具程序. 它用来比較两个文本文件的差异,是代码版本号管理的基石之中的一个.你在命令行下,输入: $ diff <变动前的文件> <变动后的文件 ...

  3. 使用boost中的线程池

      #include <boost/thread/thread.hpp>#include <boost/bind.hpp>#include <iostream> u ...

  4. 局域网指定 IP 地址后无法上网的问题

    子网掩码.默认网关.DNS 与局域网设置有关,建议指定前先 运行 cmd -> ipconfig /all 查看一下自动获取的信息. 另外留意指定IP 后需打开高级设置 -> WINS,勾 ...

  5. 将EXCEL中的列拼接成SQL insert插入语句

    工作中经常需要将EXCEL文件中的数据导入到各种数据库,但是对于不熟悉数据库的人来说,如果直接使用命令执行导入,这无疑是一个难题,也是一个风险.这里我们直接在EXCEL文件中拼接成标准的SQL ins ...

  6. ubuntu安装python3.5

    ubuntu14.04系统会自带python2.7,请不要卸载它.不同版本的Python可以共存在一个系统上. 卸载之后,桌面系统会被影响. (1)sudo add-apt-repository pp ...

  7. Xml读取异常--Invalid byte 1 of 1-byte UTF-8 sequence

    xml读取异常Invalid byte 1 of 1-byte UTF-8 sequence org.dom4j.DocumentException: Invalid byte 1 of 1-byte ...

  8. zeromq源码分析笔记之架构(1)

    1.zmq概述 ZeroMQ是一种基于消息队列的多线程网络库,其对套接字类型.连接处理.帧.甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字.引用云风的话来说:ZeroMQ 并不是一个对 so ...

  9. 解读CSS的背景(background)样式

    background-color: 可以为所有的元素设置背景色,这个属性接受任意合法的颜色值,如果希望背景色从元素文本向外少有延伸,只需增加一些内边距(padding). 注意:background- ...

  10. 手机网页中的hover效果实现

    js文件 function mouseout(obj) { var className ="hover"; var _ecname = obj.className; if (_ec ...