json格式c语言
时间: 2025-03-07 10:12:28 浏览: 6
解析和生成JSON格式的数据
使用json-c
库解析和生成JSON数据
在Linux下的C语言项目中,经常需要处理JSON格式的数据。为了实现这一目标,可以利用libjson-c
库来进行JSON格式的解析与生成[^1]。
对于JSON格式的生成,可以通过调用json_object_new_*()
系列函数创建不同类型的JSON对象(如字符串、整数等),并通过json_object_to_json_string()
将这些对象转换成标准的JSON表示形式:
#include <json/json.h>
int main() {
struct json_object *jobj;
jobj = json_object_new_object();
json_object_object_add(jobj, "name", json_object_new_string("Alice"));
json_object_object_add(jobj, "age", json_object_new_int(25));
printf("%s\n", json_object_to_json_string(jobj));
/* 清理 */
json_object_put(jobj);
}
当涉及到解析JSON时,则先通过读取文件或其他方式获取到原始的JSON字符串,再借助于json_tokener_parse()
方法将其转化为可操作的对象结构,在此基础上就可以方便地提取所需的信息了:
const char* jsonString = "{\"name\":\"Bob\",\"age\":30}";
struct json_object *parsed_obj;
parsed_obj = json_tokener_parse(jsonString);
// 获取"name"字段对应的值
printf("Name: %s\n", json_object_get_string(json_object_object_get(parsed_obj, "name")));
// 获取"age"字段对应的值
printf("Age: %d\n", json_object_get_int(json_object_object_get(parsed_obj, "age")));
以上展示了基本的操作流程;实际应用过程中可能还需要考虑错误处理等问题以提高程序健壮性。
利用cJSON
库进行相同操作
另一个常用的选项是采用cJSON
库来完成同样的任务。此库同样支持JSON文档向内部数据结构(cJSON*)之间的相互转化过程[^2][^3]。
下面给出一段示例代码用于说明如何使用cJSON
库构建并打印一个简单的JSON对象以及从给定的JSON字符串中检索特定键所关联的值:
#include "cJSON.h"
void create_and_print_example(){
cJSON *root,*item;
root=cJSON_CreateObject(); // 创建根节点
item=cJSON_CreateNumber(28);
cJSON_AddItemToObject(root,"id",item);
item=cJSON_CreateString("Charlie");
cJSON_AddItemToObject(root,"username",item);
char *out=cJSON_Print(root); // 打印整个树形结构为易于阅读的形式
puts(out);
free(out); // 记得释放内存资源
cJSON_Delete(root); // 删除cJSON*
}
void parse_from_string(const char *str){
cJSON *json=cJSON_Parse(str);
if (!json)return; // 如果解析失败则返回NULL
const char *uname=cJSON_GetStringValue(cJSON_GetObjectItemCaseSensitive(json,"username"));
int id=(int)cJSON_GetNumberValue(cJSON_GetObjectItemCaseSensitive(json,"id"));
printf("User ID:%d Username:%s\n",id,uname);
cJSON_Delete(json);
}
上述两部分分别介绍了两种不同的C语言Json库——json-c
和 cJSON
的基础功能及其具体应用场景中的编码实践。开发者可以根据个人偏好或项目需求选择合适的工具集。
阅读全文
相关推荐















