我是靠谱客的博主 活力羊,最近开发中收集的这篇文章主要介绍cJSON实例,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

/*************************************************
* example json file
* name
file
*
{
*
"firstname":"lin",
*
"lastname":"spock",
*
"age":"25",
*
"address":{
*
"city": "New York",
*
"country":"USA",
*
"street":["11","22","33"]
*
},
*
"hobbies":["basketball","football"],
*
"new":["new"]
*
}
*************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include "cJSON.h"
void Set(cJSON *root, char *str3, char *str4, char *str5, char *str6) {
/*json filename set fathercjson childcjson newvalue*/
if (strcmp(str3, "root") == 0) {
/*jsona file set root firstname chen*/
cJSON *tmp_json = cJSON_GetObjectItem(root, str4);
if (tmp_json != NULL) {
cJSON_ReplaceItemInObject(root, str4, cJSON_CreateString(str5));
} else {
fprintf(stderr, "%s元素不存在,請先添加n", str4);
fprintf(stdout, "新增元素命令格式:程序 json文件名 add object|array 父元素 子元素 新值n");
exit(0);
}
} else {
cJSON *tmp_json = cJSON_GetObjectItem(root, str3);
if (tmp_json != NULL) {
if (tmp_json->type == cJSON_Object) {
/*json file set address city Beijing*/
cJSON *obj_json = cJSON_GetObjectItem(tmp_json, str4);
if (obj_json != NULL) {
cJSON_ReplaceItemInObject(tmp_json, str4,
cJSON_CreateString(str5));
} else {
fprintf(stderr, "%s元素不存在,请先创建n", str4);
exit(0);
}
} else if (tmp_json->type == cJSON_Array) {
/*json file set hobbies 1 readbook*/
int count = cJSON_GetArraySize(tmp_json);
if (atoi(str4) < (count + 1) && atoi(str4) > 0) {
cJSON_ReplaceItemInArray(tmp_json, atoi(str4) - 1,
cJSON_CreateString(str5));
} else {
fprintf(stderr, "该数组不存在第%s个元素,请重新输入n", str4);
exit(0);
}
}
} else {
fprintf(stderr, "%s元素不存在,請先添加n", str3);
fprintf(stdout,
"新增元素命令格式:程序 json文件名 add object|array 父元素 子元素 新值n");
exit(0);
}
}
}
void Add(cJSON *root, char *str3, char *str4, char *str5, char *str6) {
/*json filename add object fathercjson childcjson addvlaue*/
if (strcmp(str3, "object") == 0) {
if (strcmp(str4, "root") == 0) {
/*jsona file add object root test test*/
cJSON *tmp_json = cJSON_GetObjectItem(root, str5);
if (tmp_json != NULL) {
fprintf(stderr, "%s元素已存在,請先删除n", str5);
fprintf(stdout, "删除命令:程序 json文件名 delete 父元素 子元素n");
exit(0);
} else {
cJSON_AddItemToObject(root, str5, cJSON_CreateString(str6));
}
} else {
/*json file add object address planet eirth*/
cJSON *tmp_json = cJSON_GetObjectItem(root, str4);
if (tmp_json != NULL) {
if (tmp_json->type == cJSON_Object) {
cJSON *obj_json = cJSON_GetObjectItem(tmp_json, str5);
if (obj_json != NULL) {
fprintf(stderr, "%s元素已存在,請先删除n", str5);
fprintf(stdout, "删除命令:程序 json文件名 delete 父元素 子元素n");
exit(0);
} else {
cJSON_AddItemToObject(tmp_json, str5,
cJSON_CreateString(str6));
}
} else if (tmp_json->type == cJSON_Array) {
cJSON *obj_json = cJSON_CreateObject();
cJSON_AddItemToArray(tmp_json, obj_json);
cJSON_AddStringToObject(obj_json, str5, str6);
}
} else {
fprintf(stderr, "%s元素不存在,请在上一级先添加%sn", str4, str4);
exit(0);
}
}
} else if (strcmp(str3, "array") == 0) {
/*json filename add array fathercjson childcjson addvalue*/
if (strcmp(str4, "root") == 0) {
/*jsona file add array root hobbies vallyball*/
cJSON *tmp_json = cJSON_GetObjectItem(root, str5);
if (tmp_json != NULL) {
cJSON_AddItemToArray(tmp_json, cJSON_CreateString(str6));
} else {
cJSON *tmp_json = cJSON_CreateArray();
cJSON_AddItemToObject(root, str5, tmp_json);
cJSON_AddItemToArray(tmp_json, cJSON_CreateString(str6));
}
} else {
fprintf(stderr, "%s数组下尚不能添加二级数组或对象n", str4);
exit(0);
/*
cJSON *tmp_json = cJSON_GetObjectItem(root, str4);
cJSON *arr_json = cJSON_GetObjectItem(tmp_json, str5);
if (arr_json != NULL) {
cJSON_AddItemToArray(arr_json, cJSON_CreateString(str6));
} else {
cJSON *arr_json = cJSON_CreateArray();
cJSON_AddItemToObject(tmp_json, str5, arr_json);
cJSON_AddItemToArray(arr_json, cJSON_CreateString(str6));
}
*/
}
} else {
fprintf(stderr, "第三个参数可选值为: object|array,请重新输入n");
exit(0);
}
}
void Delete(cJSON *root, char *str3, char *str4) {
/*json filename delete fathercjson childcjson*/
if (strcmp(str3, "root") == 0) {
/*/json file delete root firstname*/
cJSON *tmp_json = cJSON_GetObjectItem(root, str4);
if (tmp_json != NULL) {
cJSON_DeleteItemFromObject(root, str4);
} else {
fprintf(stderr, "%s元素不存在,请重新输入n", str4);
exit(0);
}
} else {
cJSON *tmp_json = cJSON_GetObjectItem(root, str3);
if (tmp_json != NULL) {
/*json file delete address city*/
if (tmp_json->type == cJSON_Object) {
cJSON *obj_json = cJSON_GetObjectItem(tmp_json, str4);
if (obj_json != NULL) {
cJSON_DeleteItemFromObject(tmp_json, str4);
} else {
fprintf(stderr, "%s元素不存在,请重新输入n", str4);
exit(0);
}
} else if (tmp_json->type == cJSON_Array) {
/*json file delete hobbies 2*/
int count = cJSON_GetArraySize(tmp_json);
if (atoi(str4) < (count + 1) && atoi(str4) > 0) {
cJSON_DeleteItemFromArray(tmp_json, atoi(str4) - 1);
} else {
fprintf(stderr, "该数组不存在第%s个元素,请重新输入n", str4);
(0);
}
}
} else {
fprintf(stderr, "%s元素不存在,请重新输入n", str3);
exit(0);
}
}
}
int main(int argc, char *argv[]) {
FILE *fp = fopen(argv[1], "r");
/*从文件中读取要解析的JSON数据*/
if (fp == NULL) {
fprintf(stderr, "第二个参数为文件名,%s文件打开失败n");
exit(0);
}
fseek(fp, 0, SEEK_END);
/*将指针指向文件末尾*/
long len = ftell(fp);
/*ftell获得当前指针位置相对于文件首的偏移字节数*/
fseek(fp, 0, SEEK_SET);
/*再将指针指回开头*/
char *data = (char*) malloc(len + 1);
/*分配内存*/
fread(data, 1, len, fp);
/*printf("%sn", data)*/
fclose(fp);
cJSON *root = cJSON_Parse(data);
/*将字符串解析成json结构体*/
char *ro = cJSON_Print(root);
/*可通过这个指针输出内容测试*/
if (NULL == root) {
fprintf(stderr, "error:%sn", cJSON_GetErrorPtr());
cJSON_Delete(root);
}
if (strcmp(argv[2], "set") == 0) {
/*改*/
if (argc != 6) {
fprintf(stderr, "参数过少或过多n");
fprintf(stdout, "set命令参数有6个n命令格式:程序 json文件名 set 父元素 子元素 新值n");
exit(0);
}
Set(root, argv[3], argv[4], argv[5], argv[6]);
} else if (strcmp(argv[2], "add") == 0) {
/*增*/
if (argc != 7) {
fprintf(stderr, "参数过少或过多n");
fprintf(stdout,"add命令参数有7个n命令格式:程序 json文件名 add object|array 父元素 子元素 新值n");
exit(0);
}
Add(root, argv[3], argv[4], argv[5], argv[6]);
} else if (strcmp(argv[2], "delete") == 0) {
/*删*/
if (argc != 5) {
fprintf(stderr, "参数过少或过多n");
fprintf(stdout, "delete命令参数有五个n命令格式:程序 json文件名 delete 父元素 子元素n");
exit(0);
}
Delete(root, argv[3], argv[4]);
} else {
fprintf(stderr, "第三个参数错误n"
"第三个参数为:set | add | deleten");
fprintf(stdout, "具体命令格式为:n"
"修改:程序 json文件名 set 父元素 子元素 新值n"
"添加:程序 json文件名 add object|array 父元素 子元素 新值n"
"删除:程序 json文件名 delete 父元素 子元素n"
"當所要操作元素在最外層時父元素為"root"n");
exit(0);
}
FILE *file;
file = fopen("file3", "wb");
/*将cjson写入文件*/
char *out = cJSON_Print(root);
fprintf(file, "%s", out);
fclose(file);
free(out);
return 1;
}


最后

以上就是活力羊为你收集整理的cJSON实例的全部内容,希望文章能够帮你解决cJSON实例所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部