JSON的C代码示例

简介: JSON的C代码示例

柳鲲鹏


以前用json,因为方便都指定子串,所以没有用到库。这次还是使用公用库,也许内容复杂。


其实要讲解析,这个正是吾最擅长的。



产生json

int main(int argc, char* argv[])
{
    int count = 0;
    while (count < 10)
    {
        char message[128];
        usleep(100*1000);
        count ++;
        struct json_object *json = json_object_new_object();
        sprintf(message, "value %d", count);
        json_object_object_add(json, "text", json_object_new_string(message));
        json_object_object_add(json, "int",  json_object_new_int(count));
        struct json_object *array = json_object_new_array();
        sprintf(message, "array %d", count);
        json_object_array_add(array, json_object_new_string(message));
        sprintf(message, "array %d", count*2);
        json_object_array_add(array, json_object_new_string(message));
        json_object_object_add(json, "array", array);
        char *string = json_object_to_json_string(json);
        //mqtt_publish(LOCAL_IP, string);
    }
    return 0;
}

解析json

/**
 可以递归输出。
 不过并无必要,需要什么获取什么。
 */
static void mqtt_json_print(const char *sname, const json_object * pval)
{
    enum json_type type;
    if (NULL == pval)
    {
        return;
    }
    /*
    json_type_null,
    json_type_boolean,
    json_type_double,
    json_type_int,
    json_type_object,
    json_type_string,*/
    type = json_object_get_type(pval);
    switch(type)
    {
        case json_type_string:
            printf("Key:%s  value: %s\n", sname, json_object_get_string(pval));
            break;
        case json_type_int:
            printf("Key:%s  value: %d\n", sname, json_object_get_int(pval));
            break;
        case json_type_array:
            break;
        default:
            break;
    }
    return;
}
static void  mqtt_json_get_print(json_object * jobj, const char *sname)
{
    json_object *pval = json_object_object_get(jobj, sname);
    if (NULL != pval)
    {
        mqtt_json_print(sname, pval);
    }
    return;
}
static int mqtt_msgarrvd(void *context, char *topicName, int topicLen, MQTTClient_message *message)
{
    char* payloadptr = (char*)message->payload;
    payloadptr[message->payloadlen] = 0;
    GH_LOG_INFO("topic=%s, msg=%s, size=%d", topicName, payloadptr, message->payloadlen);
    json_object *parsed_object= json_tokener_parse(payloadptr);
    //json_object_object_get_ex(parsed_object, "text", &value);
    mqtt_json_get_print(parsed_object, "text");
    json_object_object_foreach(parsed_object, key, value)
    {
        mqtt_json_print(key, value);
    }
    MQTTClient_freeMessage(&message);
    MQTTClient_free(topicName);
    return MQTT_MSG_PROCESSED;
}

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
1月前
|
JSON JavaScript 前端开发
JavaScript原生代码处理JSON的一些高频次方法合集
JavaScript原生代码处理JSON的一些高频次方法合集
|
JSON 文字识别 API
ocr表格识别返回的json结果,转成excel,这个转化有对应的逻辑代码吗?
ocr表格识别返回的json结果,转成excel,这个转化有对应的逻辑代码吗?
430 0
|
1月前
|
存储 JSON 编解码
python之simplejson:JSON 编/解码器示例详解
python之simplejson:JSON 编/解码器示例详解
24 0
|
1月前
|
JSON 数据格式 索引
python之JMESPath:JSON 查询语法库示例详解
python之JMESPath:JSON 查询语法库示例详解
23 0
|
1月前
|
JSON 前端开发 JavaScript
【问答系列】如何对后端返回的json格式化输出并且高亮代码
【问答系列】如何对后端返回的json格式化输出并且高亮代码
47 0
|
11月前
|
SQL JSON API
PHP读取数据库记录转换为JSON的代码(API接口的SQL语句)
PHP读取数据库记录转换为JSON的代码(API接口的SQL语句)
106 0
|
8月前
|
开发者
SAP UI5 manifest.json 里定义的 sap.ui.viewExtensions 区域的解析代码位置
SAP UI5 manifest.json 里定义的 sap.ui.viewExtensions 区域的解析代码位置
|
JSON 数据挖掘 数据格式
Pandas处理JSON文件read_json()一文详解+代码展示
Pandas处理JSON文件read_json()一文详解+代码展示
1377 0
Pandas处理JSON文件read_json()一文详解+代码展示
|
10月前
|
JSON JavaScript 前端开发
开发了一个json格式化工具,使用js格式化json的代码分享
今天给大家介绍一下如何通过js来格式化json。
79 0
|
11月前
|
JSON 关系型数据库 MySQL
php使用webSocket实现Echarts长连接自动刷新的解决方案(2):后端服务端代码返回json数据
php使用webSocket实现Echarts长连接自动刷新的解决方案(2):后端服务端代码返回json数据
126 0