c语言json库parson的介绍和使用

这篇具有很好参考价值的文章主要介绍了c语言json库parson的介绍和使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

  • 本文章主要介绍下parson库的使用
  • parson : parson是用C语言开发的一个json解析库, 提供json的序列化和反序列化功能。使用时只需要在我们的工程中引入头文件parson.h和源文件parson.c即可使用。

使用parson解析json

  • 单层json结构解析
    • 代码
    •   const char* resp = "{\"code\":0, \"flag\":true, \"msg\":\"success\"}";
        bool bRet = false;
        JSON_Value *rootValue = NULL;
      
        do {
        	//反序列化为json对象
            rootValue = json_parse_string(resp);
            if (rootValue == NULL) {
        	    break;
            }
      
            JSON_Object *rootObject = json_value_get_object(rootValue);
            if (rootObject == NULL) {
        	    break;
            }
      
            if (!json_object_has_value(rootObject, "code")) {
        	    break;
            }
      
            int code = json_object_get_number(rootObject, "code");
      
            if (!json_object_has_value(rootObject, "flag")) {
        	    break;
            }
      
            bool flag = json_object_get_boolean(rootObject, "flag");
      
            if (!json_object_has_value(rootObject, "msg")) {
        	    break;
            }
      
            const char* msg = json_object_get_string(rootObject, "msg");
      
            printf("code = %d, flag = %d, msg = %s\n", code, flag, msg);
      
            bRet = true;
        } while (0);
      
        if (rootValue != NULL) {
            json_value_free(rootValue);
            rootValue = NULL;
        }
      
        return bRet;
      
    • 执行结果
    •   code = 0, flag = 1, msg = success
      
  • 多层json结构解析
    • 代码
    •   const char* resp = "{\"code\":0, \"msg\":\"success\", \"data\":{\"name\":\"lucy\", \"score\":99.5}}";
      
        bool bRet = false;
        JSON_Value *rootValue = NULL;
      
        do {
        	rootValue = json_parse_string(resp);
        	if (rootValue == NULL) {
        		break;
        	}
      
        	JSON_Object *rootObject = json_value_get_object(rootValue);
        	if (rootObject == NULL) {
        		break;
        	}	
      
        	if (!json_object_has_value(rootObject, "code")) {
        		break;
        	}
      
        	int code = json_object_get_number(rootObject, "code");
      
      
        	if (!json_object_has_value(rootObject, "msg")) {
        		break;
        	}
      
        	const char* msg = json_object_get_string(rootObject, "msg");
      
        	if (!json_object_has_value(rootObject, "data")) {
        		break;
        	}
      
        	JSON_Object *dataObject = json_object_get_object(rootObject, "data");
        	if (dataObject == NULL) {
        		break;
        	}
      
        	if (!json_object_has_value(dataObject, "name")) {
        		break;
        	}
      
        	const char* name = json_object_get_string(dataObject, "name");
      
        	if (!json_object_has_value(dataObject, "score")) {
        		break;
        	}
      
        	double score = json_object_get_number(dataObject, "score");
      
        	printf("code = %d, msg = %s, name = %s, score = %lf\n", code, msg, name, score);
      
        	bRet = true;
        } while (0);
      
        if (rootValue != NULL) {
        	json_value_free(rootValue);
        	rootValue = NULL;
        }
      
        return bRet;
      
    • 执行结果
    •   code = 0, msg = success, name = lucy, score = 99.500000
      
  • 有数组的json结构解析
    • 代码
    •   const char* resp = "{\"code\":0, \"msg\":\"success\", \"result\":[\"tcp\", \"udp\", \"http\", \"tls\"]}";
      
        bool bRet = false;
        JSON_Value *root_value = NULL;
      
        do {
        	root_value = json_parse_string(resp);
        	if (root_value == NULL) {
        		break;
        	}
      
        	JSON_Object *root_object = json_value_get_object(root_value);
        	if (root_object == NULL) {
        		break;
        	}
      
        	if (!json_object_has_value(root_object, "code")) {
        		break;
        	}
      
        	int code = json_object_get_number(root_object, "code");
        	printf("code is %d\n", code);
      
      
        	if (!json_object_has_value(root_object, "msg")) {
        		break;
        	}
      
        	const char* msg = json_object_get_string(root_object, "msg");
        	printf("msg is %s\n", msg);
      
        	if (!json_object_has_value(root_object, "result")) {
        		break;
        	}
      
        	JSON_Array *result_obj = json_object_get_array(root_object, "result");
        	if (result_obj == NULL) {
        		break;
        	}
      
        	printf("result: ");
        	for (int i = 0; i < json_array_get_count(result_obj); i++) {
        		const char *pStr = json_array_get_string(result_obj, i);
        		if (pStr != NULL) {
        			printf("%s ", pStr);
        		}
        	}
        	printf("\n");
      
        	bRet = true;
        } while (0);
      
        if (root_value != NULL) {
        	json_value_free(root_value);
        	root_value = NULL;
        }
      
        return bRet;
      
    • 执行结果
    •   code is 0
        msg is success
        result: tcp udp http tls
      
  • json文件解析
    • 文件内容 test.json
    •   {"code":0,"flag":true,"msg":"success"}
      
    • 代码
    •   bool bRet = false;
        JSON_Value *rootValue = NULL;
      
        do {
        	// 如果json文件内容带注释可用这个函数 json_parse_file_with_comments
        	rootValue = json_parse_file("test.json");
        	if (rootValue == NULL) {
        		break;
        	}
      
        	JSON_Object *rootObject = json_value_get_object(rootValue);
        	if (rootObject == NULL) {
        		break;
        	}
      
        	if (!json_object_has_value(rootObject, "code")) {
        		break;
        	}
      
        	int code = json_object_get_number(rootObject, "code");
      
        	if (!json_object_has_value(rootObject, "flag")) {
        		break;
        	}
      
        	bool flag = json_object_get_boolean(rootObject, "flag");
      
        	if (!json_object_has_value(rootObject, "msg")) {
        		break;
        	}
      
        	const char* msg = json_object_get_string(rootObject, "msg");
      
        	printf("code = %d, flag = %d, msg = %s\n", code, flag, msg);
      
        	bRet = true;
        } while (0);
      
        if (rootValue != NULL) {
        	json_value_free(rootValue);
        	rootValue = NULL;
        }
      
        return bRet;
      
    • 执行结果
    •   code = 0, flag = 1, msg = success
      

使用parson构建json

  • 单层json结构构建
    • 代码
    •   bool bRet = false;
        JSON_Value *root_value = NULL;
      
        do {
        	root_value = json_value_init_object();
        	if (root_value == NULL) {
        		break;
        	}
      
        	JSON_Object *root_object = json_value_get_object(root_value);
        	if (root_object == NULL) {
        		break;
        	}
      
        	json_object_set_number(root_object, "code", 0);
        	json_object_set_boolean(root_object, "flag", true);
        	json_object_set_string(root_object, "msg", "success");
        	json_object_set_number(root_object, "rate", 10.5);
      
        	char *data = json_serialize_to_string(root_value);
        	if (data == NULL) {
        		break;
        	}
        	printf("%s\n", data);
        	bRet = true;
        	json_free_serialized_string(data);
        } while (0);
      
        if (root_value != NULL) {
        	json_value_free(root_value);
        	root_value = NULL;
        }
        return bRet;
      
    • 执行结果
    •   {"code":0,"flag":true,"msg":"success","rate":10.5}
      
  • 多层json结构构建
    • 代码
    •   bool bRet = false;
        JSON_Value *root_value = NULL;
      
        do {
        	root_value = json_value_init_object();
        	if (root_value == NULL) {
        		break;
        	}
      
        	JSON_Object *root_object = json_value_get_object(root_value);
        	if (root_object == NULL) {
        		break;
        	}
      
        	JSON_Value *data_value = json_value_init_object();
        	if (data_value == NULL) {
        		break;
        	}
      
        	JSON_Object *data_object = json_value_get_object(data_value);
        	if (data_object == NULL) {
        		break;
        	}
      
        	json_object_set_string(data_object, "name", "jack");
        	json_object_set_number(data_object, "age", 28);
      
        	json_object_set_number(root_object, "code", 0);
        	json_object_set_boolean(root_object, "flag", true);
        	json_object_set_string(root_object, "msg", "success");
        	json_object_set_value(root_object, "data", data_value);
      
        	char *data = json_serialize_to_string(root_value);
        	if (data == NULL) {
        		break;
        	}
        	printf("%s\n", data);
        	bRet = true;
        	json_free_serialized_string(data);
        } while (0);
      
        if (root_value != NULL) {
        	json_value_free(root_value);
        	root_value = NULL;
        }
      
        return bRet;
      
    • 执行结果
    •   {"code":0,"flag":true,"msg":"success","data":{"name":"jack","age":28}}
      
  • 带有数组的json结构构建
    • 代码
    •   bool bRet = false;
        JSON_Value *root_value = NULL;
      
        do {
        	root_value = json_value_init_object();
        	if (root_value == NULL) {
        		break;
        	}
      
        	JSON_Object *root_object = json_value_get_object(root_value);
        	if (root_object == NULL) {
        		break;
        	}
      
        	JSON_Value *data_value = json_value_init_object();
        	if (data_value == NULL) {
        		break;
        	}
      
        	JSON_Object *data_object = json_value_get_object(data_value);
        	if (data_object == NULL) {
        		break;
        	}
      
      
        	JSON_Value *dataValueArray = json_value_init_array();
        	if (dataValueArray == NULL) {
        		break;
        	}
      
        	JSON_Array *dataObjectArray = json_value_get_array(dataValueArray);
        	if (dataObjectArray == NULL) {
        		break;
        	}
      
        	for (int i = 0; i < 5; i++) {
        		JSON_Value *pValue = json_value_init_object();
        		if (pValue == NULL) {
        			break;
        		}
      
        		JSON_Object *pObject = json_value_get_object(pValue);
        		if (pObject == NULL) {
        			break;
        		}
      
        		json_object_set_number(pObject, "index", i);
        		json_object_set_string(pObject, "status","success");
      
        		json_array_append_value(dataObjectArray, pValue);
        	}
      
        	json_object_set_string(data_object, "name", "jack");
        	json_object_set_number(data_object, "age", 28);
      
        	json_object_set_number(root_object, "code", 0);
        	json_object_set_boolean(root_object, "flag", true);
        	json_object_set_string(root_object, "msg", "success");
        	json_object_set_value(root_object, "data", dataValueArray);
      
        	char *data = json_serialize_to_string(root_value);
        	if (data == NULL) {
        		break;
        	}
        	printf("%s\n", data);
        	bRet = true;
        	json_free_serialized_string(data);
        } while (0);
      
        if (root_value != NULL) {
        	json_value_free(root_value);
        	root_value = NULL;
        }
      
        return bRet;
      
    • 执行结果
    •   {"code":0,"flag":true,"msg":"success","data":[{"index":0,"status":"success"},{"index":1,"status":"success"},{"index":2,"status":"success"},{"index":3,"status":"success"},{"index":4,"status":"success"}]}
      
  • 构建json并保存到文件
    • 代码
    •   bool bRet = false;
        JSON_Value *root_value = NULL;
      
        do {
        	root_value = json_value_init_object();
        	if (root_value == NULL) {
        		break;
        	}
      
        	JSON_Object *root_object = json_value_get_object(root_value);
        	if (root_object == NULL) {
        		break;
        	}
      
        	json_object_set_number(root_object, "code", 0);
        	json_object_set_boolean(root_object, "flag", true);
        	json_object_set_string(root_object, "msg", "success");
        	json_object_set_number(root_object, "rate", 10.5);
      
        	JSON_Status status = json_serialize_to_file(root_value, "test.json");
        	if (status == JSONFailure) {
        		break;
        	}
      
        	bRet = true;
        } while (0);
      
        if (root_value != NULL) {
        	json_value_free(root_value);
        	root_value = NULL;
        }
        return bRet;
      
    • test.json文件内容
    •   {"code":0,"flag":true,"msg":"success","rate":10.5}
      

文章来源地址https://www.toymoban.com/news/detail-457180.html

到了这里,关于c语言json库parson的介绍和使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大语言模型(LLM)综述(五):使用大型语言模型的主要方法

    随着人工智能和机器学习领域的迅速发展,语言模型已经从简单的词袋模型(Bag-of-Words)和N-gram模型演变为更为复杂和强大的神经网络模型。在这一进程中,大型语言模型(LLM)尤为引人注目,它们不仅在自然语言处理(NLP)任务中表现出色,而且在各种跨领域应用中也展示

    2024年02月06日
    浏览(39)
  • 自然语言处理NLP介绍——NLP简介

    2024年02月15日
    浏览(57)
  • c语言结构体看这篇文章就够啦(详细介绍结构体)

    前言:         c语言两大重要点,一个是指针,另一个就是结构体啦,这篇文章我将全面的介绍一下结构体,和他的使用,相信大家看完这篇以后定能对结构体有个深入的理解,并且会正确的使用它。  💞 💞     欢迎来到小马学习代码博客!!!  现在已经入冬了吧,小

    2024年02月02日
    浏览(28)
  • LLaMA 简介:一个具有 650 亿参数的基础大型语言模型 官网介绍

    2023 年 2 月 24 日 更新: 我们刚刚推出了Llama 2 - 有关最新信息的更多信息,请参阅我们关于 Llama 2 的博客文章。 作为 Meta 致力于开放科学的一部分,今天我们公开发布 LLaMA(大型语言模型 Meta AI),这是一种最先进的基础大型语言模型,旨在帮助研究人员推进人工智能这一子

    2024年02月10日
    浏览(28)
  • Android Studio中SQLite的使用,主要介绍sqlite插入和读出图片(ViewBinder)的操作方法

    本人最近在写一个小的安卓项目,开发app过程中用到了安卓自带的sqlite。本文主要对sqlite图片操作进行介绍,其他存入文本之类的操作和普通数据库一样,众所周知,sqlite是一款轻型的数据库,以下先简单介绍一下sqlite,为后续做铺垫,有了解的大佬可以跳过此部分:   SQ

    2024年02月09日
    浏览(30)
  • Kafka主要可调参数简介

            kafka的参数有很多,下面我们根据kafka消息投递到消费的顺序来看下有哪些参数可调,每个参数具体是什么意思?   网络传输相关参数           socket.receive.buffer.bytes: 102400(默认值) ,socket接受缓冲区的大小,提高这个值可以提高消息的发送速度。这个是kafka给

    2024年02月11日
    浏览(26)
  • C++json库nlohmannjson使用介绍

    1、简介 最近项目中需要使用C++ Json序列化和反序列化,顺便调研了下目前比较好用的C++ json库,发现nlohmann/json应该是其中相对较好的json库。nlohmann/json有如下主要优点: 1、语法比较直观,类似于Python。 2、要使用nlohmann/json,只需要引入头文件json.hpp。无需引入lib之类的。 3、

    2024年02月13日
    浏览(16)
  • DataX简介、部署、原理和使用介绍

    项目地址:https://github.com/alibaba/DataX 官方文档:https://github.com/alibaba/DataX/blob/master/introduction.md ​ DataX 是阿里云 DataWorks数据集成 的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBas

    2024年02月15日
    浏览(27)
  • 【ARM Coresight 系列文章 10.1 - ARM Coresight STM 介绍及使用】

    上篇文章:ARM Coresight 系列文章 10 - ARM Coresight STM 介绍及使用 下篇文章:ARM Coresight 系列文章 10.2 - ARM Coresight STM Trace packets STM 支持两种类型的软件的数据,一种是 guaranteed的,另一种是 invariant 的, 对于 guaranteed 类型的数据传输,当STM 无法接收 AXI总线发过来的数据时,会通

    2024年02月16日
    浏览(32)
  • 【ARM Coresight 系列文章 3 -- DAP(Debug Access Port) 使用详细介绍】

    请阅读 【ARM Coresight SoC-400/SoC-600 专栏导读】

    2024年02月03日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包