linux c json-c
时间: 2024-12-26 10:20:31 浏览: 11
### 如何在Linux中用C语言与cJSON库进行JSON操作
#### 安装cJSON库
为了能够在Linux环境中使用`cJSON`库来处理JSON数据,需要先安装该库。可以通过源码下载并编译安装:
```bash
git clone https://github.com/DaveGamble/cJSON.git
cd cJSON
mkdir build && cd build
cmake ..
make
sudo make install
```
这会将`cJSON`库文件以及头文件安装到系统的默认位置。
#### 创建简单的JSON对象
创建一个新的`.c`文件用于编写程序,在此例子中命名为`example.c`:
```c
#include <stdio.h>
#include "cjson/cJSON.h"
int main(void){
// 创建根节点
cJSON *root = cJSON_CreateObject();
// 向JSON对象添加键值对
cJSON_AddStringToObject(root, "name", "Alice");
cJSON_AddNumberToObject(root, "age", 30);
// 将JSON对象转换成字符串表示形式
char *out = cJSON_Print(root);
printf("Generated JSON string:\n%s\n", out);
// 清理内存资源
cJSON_Delete(root);
free(out);
}
```
上述代码展示了怎样利用`cJSON`函数接口构造一个基本的JSON对象,并将其序列化为字符数组以便打印输出[^1]。
#### 解析接收到的JSON字符串
当接收到来自其他地方传入的数据流时,可能需要解析其中包含的信息。下面给出了解析一段预定义好的JSON串的例子:
```c
#include <stdio.h>
#include "cjson/cJSON.h"
void parse_json(const char* json_string){
// 加载输入的JSON字符串至内部结构体
cJSON *root = cJSON_Parse(json_string);
if (!root) {
const char *error_ptr = cJSON_GetErrorPtr();
if (error_ptr != NULL) fprintf(stderr,"Error before: %s\n", error_ptr);
return;
}
// 获取特定字段的内容
cJSON *format_item = cJSON_GetObjectItemCaseSensitive(root, "format");
if(cJSON_IsString(format_item)){
printf("Format is '%s'\n", format_item->valuestring);
}else{
printf("No valid 'format' field found.\n");
}
// 记得释放分配给JSON树状图使用的堆空间
cJSON_Delete(root);
}
int main(){
const char* sample_json = "{\"format\":\"UTF8\"}";
parse_json(sample_json);
}
```
这里说明了如何读取外部提供的JSON文本,并从中提取指定名称下的成员变量值[^3]。
#### 编译和执行
完成编码之后,可以按照如下命令来进行编译链接工作:
```bash
gcc -o example example.c -lcjson
./example
```
如果一切顺利的话,则可以看到由程序产生的预期结果被正确显示出来。
阅读全文